对话框程序是窗口程序的子集。窗口程序大部分的工作由对话框程序执行。

对话框的相关设置在工程的.dlg文件里,使用资源编辑器可进行对话框设置。

设置对话框控件及其属性。一般常设置控件的Name和Caption属性。Name是对话框控件的标识,在C-Free里它的宏定义在rsrc.inc文件里,其有一定的命名规则。

对话框菜单设置好后,在对话框Menu属性中添加菜单。

Image控件注意Type和Image属性。

EditText控件注意xStyle属性。

资源最好保存在工程下。

对话框设置好后,需要在main.cpp中写处理函数。

注意要#include "rsrc.inc"。

按钮的点击在Main_OnCommand中。

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
 int iDrivesNum = 0;
 TCHAR cStr[10] = "IHGFEDCBA";
    switch(id)
    {
  case IDC_BTNGO:
   TCHAR cR[256];
   GetDlgItemText(hwnd, IDC_EDTR, cR, sizeof(cR)/sizeof(TCHAR));
   float fR = atof(cR);
   fR = 3.1415926*fR*fR;
   gcvt(fR, 8, cR);
   SetDlgItemText(hwnd, IDC_EDTRESULT, cR);
  break;
  case IDC_BTNINFO:
   DWORD dInfo = GetLogicalDrives(); 
   TCHAR cInfo[256];
   TCHAR cResult[256];
   itoa(dInfo, cInfo, 2);
   for(int i = lstrlen(cInfo)-1; i >= 0; i--)
   {
    if(cInfo[i] == '1')
    {
     cResult[iDrivesNum] = cStr[i];
     iDrivesNum++;   
     //TCHAR cTemp = cStr[i];
     //lstrcat(cResult, &cTemp);
     //为什么会出现特殊字符?
    }
   }
   cResult[iDrivesNum+1] = '\0';
   SetDlgItemText(hwnd, IDC_EDTINFO, cResult);
  break;
        default:break;
    }

}

问题部分是因为lstrcat是连接字符串(字符指针)的,不能用来直接连接char。

参考资料:

lstrcat http://baike.baidu.com/view/1906745.htm

strcat http://baike.baidu.com/view/1028534.htm

strncat http://baike.baidu.com/view/1028544.htm

问题部分改为

    if(cInfo[i] == '1')
    {
      iDrivesNum++;   
     TCHAR* cTemp = &cStr[i];
     strncat(cResult, cTemp, 1);
     //为什么只在第一个位置出现特殊字符?
    }

ZeroMemory(cResult, sizeof(cResult));

Dialog