我正在使用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函数,但这不是技巧。任何想法?
不,我的意思是不动窗。基本上,我创建的窗口应该能够接受文本并且可以同时保持不动。
答案 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 。我的代码中缺少任何东西,还是有更多建议?