《精通Visual C++ 实效编程280例》读书笔记(第一章 窗口)

最近在看这本书,在这里把一些自己原来不太熟和没太用过的函数记下来。肯定不是完全的280个例子,因为有一部分我已经会了,就不发了,大家有兴趣的也去买书吧 ^_^

 

1、最大化和最小化窗口

     SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0);//最大化

     SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);//最小化

     SendMessage(WM_SYSCOMMAND,SC_RESTORE,0);//恢复窗口

2、关闭窗口

     SendMessage(WM_CLOSE,0,0);

3、设置窗口大小和位置

     SetWindowPos(NULL,0,0,320,200,SWP_NOZORDER);

     MoveWindow(0,200,200,320);

4、居中显示窗口

     CenterWindow();

5、设置顶层窗口

     SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);

6、显示或隐藏窗口的标题栏

     ModifyStyle(WS_CAPTION,0,SWP_FRAMECHANGED);//删除标题栏风格

     ModifyStyle(WS_CAPTION,0,SWP_FRAMECHANGED);//添加标题栏风格

7、改变窗口形状

     CRect rect;

     GetClientRect(rect);

     CRgn rgn;

     rgn.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);//设置矩形窗口

     rgn.CreateEllipticRgn(0,0,rect.Width(),rect,Height());//设置椭圆形窗口

     rgn.CreateRoundRectRgn(0,0,rect.Width(),rect.Height(),rect.Width()/2,rect.Height()/2);//设置圆矩形窗口

     CPoint point[6];

     point[0].x = 0;

     point[0].y = rect.Height()/2;

     point[1].x = rect.Width()/2;

     point[1].y = 0;

     point[2].x = 2*rect.Width()/3;

     point[2].y = 0;

     .....

    rgn.CreatePolygonRgn(point,6,ALTERNATE);//设置多边形窗口

    setWindowRgn((HRGN)rgn,TRUE); 

8、窗口闪烁

     SetTimer(1,1000,NULL);

      if (nIDEvent == 1)
     {
          FlashWindow(TRUE);
     }
     CDialog::OnTimer(nIDEvent);

9、枚举所有窗口类名及名称

      第一种方法:

      CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
      pList->DeleteAllItems();
      pList->SetRedraw(FALSE);
      CWnd* pDesktopWnd = CWnd::GetDesktopWindow();
      CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);
      while(pWnd != NULL)
      {
          int nItem = pList->GetItemCount();
          CString strClassName = "";
          ::GetClassName(pWnd->GetSafeHwnd(),strClassName.GetBuffer(256),256);
          strClassName.ReleaseBuffer();
          pList->InsertItem(nItem,strClassName);
          CString strWindowText = "";
          ::GetWindowText(pWnd->GetSafeHwnd(),strWindowText.GetBuffer(256),256);
          strWindowText.ReleaseBuffer();
          pList->SetItemText(nItem,1,strWindowText);
          pWnd = pWnd->GetWindow(GW_HWNDNEXT);
       }
       pList->SetRedraw(TRUE);

       第二种方法:

       CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
       pList->DeleteAllItems();
       pList->SetRedraw(FALSE);
       ::EnumWindows(EnumWndProc,(LPARAM)pList);
        pList->SetRedraw(TRUE);

        BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
        {
             if (hwnd == NULL)
            {
                    return FALSE;
             }
            CListCtrl* pList = (CListCtrl*)lParam;
            int nItem = pList->GetItemCount();
            CString strClassName = "";
            ::GetClassName(hwnd,strClassName.GetBuffer(256),256);
            strClassName.ReleaseBuffer();
            pList->InsertItem(nItem,strClassName);
            CString strWindowText = "";
            ::GetWindowText(hwnd,strWindowText.GetBuffer(256),256);
            strWindowText.ReleaseBuffer();
            pList->SetItemText(nItem,1,strWindowText);
            return TRUE;
       }

10、客户区背景图片

      OnInitDialog():

      CRect rect;
      GetWindowRect(&rect);
      CBitmap bmp;
      bmp.LoadBitmap(IDB_BITMAP1);
      CDC dc;
      CDC* pDC = GetDC();
      dc.CreateCompatibleDC(pDC);
      dc.SelectObject(&bmp);
      CRgn rgn1;
       rgn1.CreateRectRgn(0,0,rect.Width(),rect.Height());
       for (int x = 0;x < rect.Width();x++)
       {
             for (int y = 0;y < rect.Height();y++)
            {
                  COLORREF cr = dc.GetPixel(x,y);
                  if (cr = RGB(0,0,0))
                 {
                      CRgn rgn2;
                      rgn2.CreateRectRgn(x,y,x+1,y+1);
                      rgn1.CombineRgn(&rgn1,&rgn2,RGN_XOR);
                 }
             }
       }
       SetWindowRgn((HRGN)rgn1,TRUE);
       ReleaseDC(pDC);//以上的图片窗口的代码,使用后背景将变为资源中的第一个BMP位图

       OnEraseBkGnd():

       CRect rect;
       GetWindowRect(&rect);
       CBitmap bmp;
       bmp.LoadBitmap(IDB_BITMAP1);
       CDC dc;
       dc.CreateCompatibleDC(pDC);
       dc.SelectObject(&bmp);
       pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);
       return TRUE;

       至此,窗口部分,整理完成,效果图如下:

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值