计机羊咩咩 发表于 2014-8-17 17:24:02

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;

智商是硬伤 发表于 2015-8-25 07:35:15

{:7_146:}

waliemiao 发表于 2015-10-15 04:16:57

学习
页: [1]
查看完整版本: SetWindowPos函数更改窗口的问题