常用对话框Win32

时间:2013-04-10 00:03:12

标签: c++ winapi modal-dialog

我有一个常见的颜色对话框,我想在菜单按下时激活。 不幸的是,每次按下该项目时,窗口都会失去焦点,就好像会出现一个对话框,但对话框永远不会出现。

我现在使用的代码如下:

case ID_TOOL_CHOOSECOLOR:
//show colour dialog
ChooseColor(&cc);

我已经初始化了我的CHOOSECOLOR结构:

 cc.lStructSize    = sizeof (CHOOSECOLOR) ;
 cc.hwndOwner      = NULL ;
 cc.hInstance      = NULL ;
 cc.rgbResult      = RGB (0x80, 0x80, 0x80) ;
 cc.lpCustColors   = crCustColor ;
 cc.Flags          = CC_RGBINIT | CC_FULLOPEN ;
 cc.lCustData      = 0 ;
 cc.lpfnHook       = NULL ;
 cc.lpTemplateName = NULL ;

奇怪的是,只有在按下“ALT”键(并且只有alt键)后,对话框才会出现。有什么提示吗?

顺便说一下,我正试图在MDI文档中这样做。

由于

3 个答案:

答案 0 :(得分:5)

我能看到的唯一问题是你没有为对话框指定所有者。这可能会导致在主窗口后面显示对话框。指定主窗口的句柄作为对话框的所有者。

详细了解Window Features page on MSDN上的窗口所有权。

答案 1 :(得分:0)

修正了它!

事实证明,我遇到的问题是在主窗口的WndProc中。

我已将WM_PAINT命令设置为return 0;而不是break;

return 0更改为break解决了所有问题! 我认为这是因为我的return会退出wndproc,而break会允许我继续return MDIFrameProc(hwnd, message, wparam, lparam)

我可能错了,但这是我能提出的最佳解释,解释了为什么break有效,但return 0没有。

答案 2 :(得分:0)

绘画后,请务必致电ValidateRect(HWND,CONST RECT*);