创建一个窗口静态以及允许使用CreateWIndowEx()添加文本

时间:2009-06-26 22:06:30

标签: c++ windows winapi

我正在使用CreateWindowEx()函数创建一个“编辑”窗口,即用户可以键入的位置。

  

g_hwndMain = CreateWindowEx(0,                    WC_TEXT,
                               NULL,
                               WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
                               0,0,400,200,
                               phwnd,NULL,                  g_hInstance,NULL);

但我也希望窗口是静态的。在创建窗口期间有没有办法做到这一点?或者在创建窗口后可以使用的任何其他功能?我在使用SWP_NOSENDCHANGING和SWP_NOREPOSITION创建窗口后尝试使用SetWindowPos函数,但这不是技巧。任何想法?


不,我的意思是不动窗。基本上,我创建的窗口应该能够接受文本并且可以同时保持不动。

2 个答案:

答案 0 :(得分:0)

您需要处理该窗口的WM_WINDOWPOSCHANGING消息,然后在转发之前设置SWP_NOMOVE结构的flags成员的WINDOWPOS标志。

这个blog post有一个例子(虽然他正在阻止尺寸变化,但技术是相同的)。

答案 1 :(得分:0)

感谢您的帮助。好到目前为止,我已经完成了这个来处理WM_WINDOWPOSCHANGING消息

BOOL OnWindowPosChanging(HWND hwnd, WINDOWPOS *pwp)
{

    return 0;
}

LRESULT CALLBACK
WndProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uiMsg) {

        HANDLE_MSG(hwnd, WM_WINDOWPOSCHANGING, OnWindowPosChanging);
    }

    return DefWindowProc(hwnd, uiMsg, wParam, lParam);
}

当我创建窗口时,我这样做:

g_hwndMain =  CreateWindowEx(0,
                            TEXT("EDIT"),
                            NULL, 
                            WS_BORDER,
                            0, 0, 400, 200,
                            phwnd, NULL, 
                            g_hInstance, NULL);

                    if (!g_hwndMain) {
                        RemoveImages(spHTMLDoc);//Just so I know that the window has been created properly
                    }
                    else{                           

                        SetWindowPos(g_hwndMain, HWND_TOP, 500, 500, 300, 300,  SWP_NOSENDCHANGING | SWP_SHOWWINDOW );
                    }

SWP_NOMOVE标志不允许代码更改窗口的位置,但用户仍然可以通过使用鼠标移动来更改窗口的位置。但这正是我想要阻止的。该窗口应为 static 。我的代码中缺少任何东西,还是有更多建议?