Winapi IsDialogMessage()不会导航到多行编辑

时间:2014-11-06 13:02:03

标签: winapi

我有一些带有一些编辑控件的窗口,但是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);
     }

2 个答案:

答案 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(....