第十一章 对话框part2

来源:互联网 发布:欠淘宝贷款一万立案吗 编辑:程序博客网 时间:2024/05/22 13:24

更复杂的对话框

ABOUT2.CPP

资源文件

使用对话框控件

如上所示大多数子窗口控件发送WM_COMMAND消息给其父窗口(唯一例外的是滚动条控件)

如上RC文件中GROUPBOX控件是一个带标题(标题为「Color」或者「Figure」)的分组方块,每组单选按钮都由这样的分组方块包围。

选中和不选中按钮均需要向子窗口控件发送BM_CHECK消息。要设定一个按钮选中标记,您可以使用: SendMessage(hwndCtrl, BM_SETCHECK, 1, 0);

要消除选中标记,您可以使用: SendMessage (hwndCtrl, BM_SETCHECK, 0, 0);hwndCtrl参数是子窗口按钮控件的窗口句柄。

id = GetWindowLong (hwndCtrl, GWL_ID) ;   //可以用对话框句柄和控件ID来取得一个对话框控件的窗口句柄

轮流使用所有八种颜色的ID值:

第一种简化的方法是使用专门的对话框程序: SendDlgItemMessage (hDlg, id, iMsg, wParam, lParam) ;

第二种方法:CheckRadioButton (hDlg, idFirst, idLast, idCheck);这个函数将ID在idFirst到idLast之间的所有单选按钮的选中标记都清除掉.所以这个在使用复选框时,变得十分有用

如果是建立了一个「CHECKBOX」对话框窗口控件,那么可以使用如下的函数来设定和清除选中标记: CheckDlgButton (hDlg, idCheckbox, iCheck);如果iCheck设定为1,那么按钮被选中;如果设定为0,那么按钮不被选中。Check = IsDlgButtonChecked (hDlg, idCheckbox) ; //取得对话框中某个复选框的状态。

 

Tab停留和分组

Windows完成了将输入焦点从一个控件移动到另一个控件的所有工作。尽管如此,您必须在对话框模板中使用WS_TABSTOP和WS_GROUP窗口样式达到此目的。对于所有想要使用Tab键存取的控件,都要在其窗口样式中指定WS_TABSTOP。包含WS_TABSTOP样式的控件(特别是静态控件)不应该取得输入焦点,文字字段中的「&」将导致紧跟其后的字母以底线显示。

indows提供了两个函数,以便程序写作者找寻下一个或者前一个Tab键停留项或者组项

hwndCtrl = GetNextDlgTabItem (hDlg, hwndCtrl, bPrevious) ;

wndCtrl = GetNextDlgGroupItem (hDlg, hwndCtrl, bPrevious) ;  

 

在对话框上画图

将其它函数用于对话框

EnableWindow(hwndCtrl, bEnable);

当bEnable为TRUE(非0)时,它启用控件;当bEnable为FALSE(0)时,它禁用控件。在控件被禁用时,它不再接收键盘或者鼠标输入。

定义自己的控件

EllipPushWndProc只是一个空架子。例如,按钮不会像普通的按键那样闪烁。要翻转按键内的颜色,窗口消息处理程序必须处理WM_KEYDOWN(来自空格键)和WM_LBUTTONDOWN消息。EllipPushWndProc也不处理WM_ENABLE消息。如上所述,对话框程序可以使用EnableWindow函数来禁用某窗口。

原创粉丝点击