界面制作与数据的显示和获取
一个窗口程序由界面+功能组成。
对话框程序很常用的原因之一就是有所见即所得的资源编辑器;
VS的资源编辑器很好用,而免费的ResEdit也很好用(搜索ResEdit即可);
这一节最主要的是了解如何从界面上获取数据,又如何把数据显示在界面上。
(字符串) SetDlgItemTextGetDlgItemText
(整数) SetDlgItemInt GetDlgItemInt
其中,Text使用更常见一些,而整数的使用更简便一些。
UINT GetDlgItemInt(HWND hDlg,int nlDDlgltem,BOOL *IpTranslated,BOOL bSigned);
(1)hDlg:指向含有利益控制的对话框的句柄。
(2)nlDDlgltem:指定文本将被转变的控制的对话项目标识符。
(3)IpTranslated:指向一个Boolean变量的指针。该变量保存函数成功/失败的值。
TRUE表示成功,FALSE表示失败。此参数为可选的。它可以为NULL。
(4)bSigned:指定函数足否在开始时为一个最小的消息检测文本,且如果发现一个消息整型值,则返回它。
TRUE指定应该这样做,FALSE指定不应该这样做。
BOOL SetDlgItemInt(HWND hDlg,int nIDDlgItem,UINT uValue,BOOL bSigned);
(1)hDlg:指向对话框窗口的句柄。
(2)nIDDlgItem:要改变其文本的控件ID。
(3)uValue:指向要设置的值。
(4)bSigned:指定uValue是否为一个有符号的值。
完成后的程序就是这个样子:
1. 使用int非常简便:
//获取字符串输入
//将字符串转换为数字进行计算
int iPlus1,iPlus2,iOut;
iPlus1 = GetDlgItemInt(hwnd, IDC_EDIT1,NULL,0);
iPlus2 = GetDlgItemInt(hwnd, IDC_EDIT2,NULL,0);
iOut = iPlus1 + iPlus2;
//将计算结果转换成字符串输出
SetDlgItemInt(hwnd, IDC_EDIT3,iOut,0);
2.1 使用atoi, itoa函数
//获取字符串输入
CHAR str1[10]= {0},str2[10]={0};
GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));
GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));
//将字符串转换为数字进行计算
int iPlus1,iPlus2,iOut;
iPlus1 = atoi(str1);
iPlus2 = atoi(str2);
iOut = iPlus1 + iPlus2;
//将计算结果转换成字符串输出
CHAR strOut[10] = {0};
itoa(iOut, strOut, 10);
SetDlgItemText(hwnd, IDC_EDIT3, strOut);
2.2 使用sscanf,sprintf函数(如果界面上真的会输入AE FF这类16进制的数字,上面的atoi是会挂掉的!)
sscanf(str1,"%d",&iPlus1); //替换iPlus1 = atoi(str1);
sscanf(str2,"%d",&iPlus2); //替换iPlus2 = atoi(str2);
sprintf(strOut,"%d",iOut); //替换itoa(iOut, strOut, 10);
这一节,主要是加深对界面文本转换成数字并进行计算,然后把计算结果再以文本形式显示在界面上的理解,对于Windows窗口程序,做的很多的事情就是需要用户输入,并把用户输入的文本转换成程序可以使用的数据类型,然后反馈给用户。
这个练习可以用对话框模板进行,界面简单制作在2~3分钟左右,程序的编写应该控制在3分钟内完成。