zoukankan      html  css  js  c++  java
  • 缩小客户区(扩大非客户区)的方法

    当Windows收到 WM_NCCALCSIZE 消息时会指定客户区大小,我们可以在这个时候设置客户区的大小。
    参数lParam是一个NCCALCSIZE_PARAMS结构,保存包含三个矩形的数组。第一个矩形保存窗口的客户区。
    你只要改写这个矩形的值就可以修改客户区的大小了。
    修改了客户区的大小后,还要响应WM_NCPAINT消息,来绘制整个非客户区。
    响应WM_NCCALCSIZE和WM_NCPAINT消息后都必须调用默认窗口处理函数,以便实现缺省处理。

    下面是一个(SDK)例子:(出于方便我只列出了窗口处理过程)

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {

       PAINTSTRUCT ps;
       HDC hdc;

      switch (message)
      {
      case WM_PAINT:
          hdc = BeginPaint(hWnd, &ps);
          TextOut(hdc,100,100,TEXT("缩小客户区的例子"),lstrlen(TEXT("缩小客户区的例子")));
          EndPaint(hWnd, &ps);
          break;
      case WM_DESTROY:
          PostQuitMessage(0);
          break;
     default:
          if(message == WM_NCCALCSIZE)
         {
          //缩小客户区的范围
         InflateRect(&((NCCALCSIZE_PARAMS* )lParam)->rgrc[0],-WIDTH,-WIDTH);
         }
         if(message == WM_NCPAINT)
         {
         RECT rc;
         GetClientRect(hWnd,&rc);   RECT rcWnd;//窗口坐标

        GetWindowRect(hWnd,&rcWnd);      
        ScreenToClient(hWnd,(LPPOINT)&rcWnd.left);// 将窗口坐标转换为客户坐标
        ScreenToClient(hWnd,(LPPOINT)&rcWnd.right);

        rc.left -= rcWnd.left; //计算得到窗口内新的客户区域坐标
        rc.top -= rcWnd.top;
        rc.right += rc.left;
        rc.bottom  += rc.top;

        HDC hdc = GetWindowDC(hWnd);
        //现在rc是一个新的窗口内的客户区坐标
        ExcludeClipRect(hdc,rc.left,rc.top,rc.right,rc.bottom); //不刷新客户区域
        InflateRect(&rc,WIDTH,WIDTH);  // 将客户区域坐标扩大WIDTH
        //在客户区域的外围画一个红色边框
        HBRUSH hBr = CreateSolidBrush(RGB(255,0,0));
        FillRect(hdc,&rc, hBr);
        ReleaseDC(hWnd,hdc);
        }
         return DefWindowProc(hWnd, message, wParam, lParam);
      }

     return 0;

    }


    WIDTH是一个宏定义的大于0的整数,你可以自己定义它的值。

  • 相关阅读:
    [SCM]源码管理 perforce的权限管理
    [BuildRelease]产品和文件版本号
    删除所有的.svn 文件
    [SCM]源码管理 perforce快速入门
    6个Linux chkconfig命令实例 增加,删除,查看和修改services的自动启动选项
    [SCM]源码管理 perforce管理员需要知道的命令
    [SCM]源码管理 perforce与分布式团队的开发
    [SCM]源码管理 perforce命令行高级
    PHP aes加密 mcrypt转openssl问题;
    《Excel与VBA程序设计》第四章更新
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/1007852.html
Copyright © 2011-2022 走看看