我有一些带有一些编辑控件的窗口,但是IsDialogMessage()会跳过多行编辑。任何人都可以指导我如何改变它吗?
n=WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL;
if(!readonly)
n|=WS_TABSTOP;
if(multi)
n=WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|WS_VSCROLL;
if(readonly)
n|=ES_READONLY;
obj=CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", n,(int)x, (int)y, (int)w, (int)h, parent, (HMENU)id, GetModuleHandle(0), 0);
消息循环:
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) break;
if(msg.hwnd!=hwnd){
HWND obj;
obj=GetParent(msg.hwnd);
if(obj){
if(IsDialogMessage(obj,&msg))
continue;
}
TranslateMessage(&msg);
}
DispatchMessage(&msg);
}
答案 0 :(得分:2)
在if(!readonly) n |= WS_TABSTOP
行上,您正确设置了控件的制表位样式。
在最后一行,如果是multi
,则使用一组不包含样式n
的标记覆盖WS_TABSTOP
。< / p>
切换前两个if
的顺序。
答案 1 :(得分:0)
补充jlahd的回答:
进一步if(!readonly)
和某些行if(readonly)
是不好的风格。并且else
上的测试也更好multi
。如下所示:
if(multi)
n=WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|WS_VSCROLL;
else
n=WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL;
if(!readonly)
n|=WS_TABSTOP;
else
n|=ES_READONLY;
obj=CreateWindowEx(....