|
主要是讨论两种对话框,函数WINDOW_CreateEx,函数WM_CreateWindowAsChild,函数WM_CreateWindow和桌面窗口的聚焦情况:

1. 函数GUI_CreateDialogBox 创建对话框,主体窗口是WINDOW_CreateIndirect创建,不支持聚焦。
2. 函数GUI_CreateDialogBox 创建对话框,主体窗口是FRAMEWIN_CreateIndirect创建,不支持聚焦。
注:先进入WM_CREATE消息,然后进入WM_INIT_DIALOG消息,在WM_CREATE消息里面,仅pMsg->hWin是有效的,此时WM_GetClientWindow( pMsg->hWin )还无效,获得的句柄是0。在入WM_INIT_DIALOG消息消息里面就没有问题了,都有效了。
对于对话框来说,如果上面有聚焦的控件,会自动的进行聚焦。
3. 函数WINDOW_CreateEx不支持WM_CREATE消息。
4. WM_CreateWindowAsChild或者函数WM_CreateWindow
(1)不带任何控件的情况下是可以聚焦的,这点特别注意,像上面的三个都是不可以的。
(2)WM_SET_FOCUS支持,前面三点介绍的函数都不支持。
If the window gains the input focus, the Data.v value is set to 1. If the window accepts the input focus, it should set the Data.v value to 0 in reaction on this message.
If the window loses the input focus, the Data.v value is set to 0.
case WM_SET_FOCUS:
printf("pMsg->Data.v = %d\r\n", pMsg->Data.v);
pMsg->Data.v = 0; 是1的时候,切记清除。
break;
5. 桌面窗口也是支持设置聚焦的。
|
|