学了一天,敲了代码,改了一天,真心体会到了写简单,改代码真费劲。
今天的收获如下,希望对大家有帮助。
1、PaintWindow
2、通过给Windows发送-一个BM_ SETSTATE消息,可以模拟按键按钮的状态变化。
下面的语句将导致按钮看上去被按一样:SendMessage (hwndButton, BM_ SETSTATE,1, 0);
调用下面的函数则会让按钮回到正常状态:SendMessage (hwndButton, BM_ SETSTATE,0, 0);窗口句柄hwndButton是CreateWindow调用的返回值。
3、
switch(LOWORD(wParam))
{
case IDC_BLACK:
case IDC_ RED:
case IDC _GREEN:
case IDC_ YELLOW:
case IDC_ BLUE:
case IDC_ MAGENTA:
case IDC_ CYAN:
case IDC_ _WHITE:
icolor = LOWORD (wParam) ;
for (i = IDC_ BLACK,i <= IDC. WHITE, i++)
SendMessage (GetDlgItem (hDlg, i), BM_ SETCHECK,i == LOWORD (WParam), 0);
return TRUE;
}
将选中的颜色值存在iColor中,添加一个关于颜色值的循环。程序获取了这8哥单选按钮控制的窗口句柄,并用SendMessage向每一个句柄发送了一条BM_SETCHECK消息。只有对向对话框窗口过程发送WM_COMMAND消息的按钮,消息的wParam值才设为1。
第一种捷径是特殊的对话框过程sendDlgItemMessage:
SendDlgItemMessage (hDlg, id, iMsg,wParam, 1Param) ;
它等价于SendMessage (GetD1gItem(hD1g,iMsg ),id, WParam, 1Param) ;
现在,程序循环如下所示:
for (i = IDC_ BLACK,i <= IDC WHITE i++)
SendDlgItemMessage (hD1g, i, BM_ SETCHECK, i == LWORD (wParam),0);
更有甚者:CheckRadioButton函数时
CheckRadioButton(hDlg, idFirst, idLast, idCheck);
这个函数只选中ID值是idCheck的单选按钮,其他从ID值是idFirst到idIast的单选按钮都被取消选中。这要求ID值必须是顺序排列的。现在我们可以彻底摆脱循环并使用:
4、按钮的默认ID值是IDOK。
5、对话框过程不需要处理WM_PAINT和WM_DESTROY消息,它也不会收到WM_CREATE消息。然而它会处理一条专门的WM_INITDIALOG消息时进行初始化。
WM_INITDIALOG是对话框接收的第一条消息,这条消息只发送给对话框过程。另外,在处理WM_INITDIALOG时,对话框过程也可以调用setfocus函数来设置焦点所在的子窗口控件,同时返回FALSE.
除以上消息外,对话框过程只处理WM_COMMAND。当鼠标单机按钮控件或者当焦点在按钮控件时按下空格键,按钮控件就会向父类窗口发送WM_COMMAND。该消息的wParam参数的低位字时控件的ID(在对话框模板中被设定为IDOK).