设为首页 加入收藏

TOP

对话方块(五十四)
2010-12-30 21:13:56 来源: 作者: 【 】 浏览:40915
Tags:对话 方块
reateDialog呼叫与对话方块模板一起,被Windows有效地转换为一个CreateWindow呼叫。该CreateWindow呼叫的功能与下面的呼叫相同:

hwnd = CreateWindow (TEXT ("HexCalc"), TEXT ("Hex Calculator"),
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
102 * 4 / cxChar, 122 * 8 / cyChar,
NULL, NULL, hInstance, NULL) ;

其中,cxChar和cyChar变数分别是系统字体字元的宽度和高度。

我们通过让Windows来进行CreateWindow呼叫而收获甚丰:Windows不会在建立弹出式视窗1後就停止,它还会为对话方块模板中定义的其他29个子视窗按键控制项呼叫CreateWindow。所有这些控制项都给父视窗的视窗讯息处理程式发送WM_COMMAND讯息,该程序正是WndProc。对於建立一个包含许多子视窗的视窗来说,这是一个很好的技巧。

下面是使HEXCALC的程式码量下降到最少的另一种方法:或许您会注意到HEXCALC没有表头档案,表头档案中通常包含对话方块模板中,需要为所有子视窗控制项定义的识别字。我们之所以可以不要这个档案,是因为每个按键控制项的ID设定为出现在控制项上的文字的ASCII码。这意味著,WndProc可以完全相同地对待WM_COMMAND讯息和WM_CHAR讯息。在每种情况下,wParam的低字组都是按钮的ASCII码。

当然,对键盘讯息进行一些处理是必要的。WndProc拦截WM_KEYDOWN讯息,将左箭头键转换为Backspace键。在处理WM_CHAR讯息时,WndProc将字元代码转换为大写,Enter键转换为等号键的ASCII码。

WM_CHAR讯息的有效性是通过呼叫GetDlgItem来检验的。如果GetDlgItem函式传回0,那么键盘字元不是对话方块模板中定义的ID之一。如果字元是ID之一,则通过给相应的按钮发送一对BM_SETSTATE讯息,来使之闪烁:

if (hButton = GetDlgItem (hwnd, wParam))
{
SendMessage (hButton, BM_SET
首页 上一页 51 52 53 54 55 56 57 下一页 尾页 54/82/82
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇剪贴簿 下一篇功能表及其他资源

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: