SetWindowPos函数更改窗口的问题
SetWindowPos函数用于更改窗口的位置 大小以及在z order的顺序我使用此函数最后一个参数设置为SWP_NOMOVE|SWP_NOZORDER
意为忽略z order和窗口位置(保持原值),只修改窗口大小
然而运行后窗口仍保持CreateWindow函数的大小设置
我的目的是CreateWindow设置的窗口大小不包含非客户区
比如设置了300,300那么大 本来这个大小是整个窗口(包括非客户区)的尺寸但我重设窗口大小
最后的结果是300,300只包括客户区的大小 而整个窗口(包括非客户区)的尺寸大于300,300
变量名都是和用意一样的了
下面是源代码(局部),求给出问题所在
hwnd = CreateWindow(szAppName,
TEXT("random"),
WS_OVERLAPPEDWINDOW,
300,
300,
300,
300,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndPro(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect,WinRect,ClientRect;
int strMath,iHighGap,iWidthGap;
switch(message)
{
case WM_CREATE:
GetWindowRect(hwnd,&WinRect);
GetClientRect(hwnd,&ClientRect);
iHighGap = (WinRect.bottom - WinRect.top) - (ClientRect.bottom - ClientRect.top);
iWidthGap = (WinRect.right - WinRect.left) - (ClientRect.right - ClientRect.left);
SetWindowPos(hwnd,NULL,0,0,
ClientRect.right + iWidthGap,ClientRect.bottom + iHighGap,SWP_NOMOVE|SWP_NOZORDER);
return 0;
{:7_146:} 学习
页:
[1]