我有一个常见的颜色对话框,我想在菜单按下时激活。 不幸的是,每次按下该项目时,窗口都会失去焦点,就好像会出现一个对话框,但对话框永远不会出现。
我现在使用的代码如下:
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文档中这样做。
由于
答案 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*);