posts - 25, comments - 69, trackbacks - 0, articles - 2

          隨心所欲的為你的vc對話框增加skin

          Posted on 2006-12-07 16:02 壯士日志 閱讀(471) 評論(0)  編輯  收藏 所屬分類: 編程技術

          vc的對話框中,如果直接用picturebox作為對話框的背景,則其他控件會被擋住。經過高手指點,重載了WM_ERASEBKGND消息處理函數,很少的解決了這個問題。而且按照這個思路,可以很方便的為dialog增加動態的skin:

          聲明消息處理函數:

          ?// Generated message map functions
          ?//{{AFX_MSG(Input)
          ?afx_msg BOOL OnEraseBkgnd(CDC* pDC);
          ?afx_msg void OnButtonOk();
          ?afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
          ?afx_msg void OnPaint();
          ?//}}AFX_MSG
          ?DECLARE_MESSAGE_MAP()

          聲明消息循環:
          BEGIN_MESSAGE_MAP(Input, CDialog)
          ?//{{AFX_MSG_MAP(Input)
          ?ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)
          ?ON_WM_LBUTTONDBLCLK()
          ?ON_WM_PAINT()
          ?ON_WM_ERASEBKGND()
          ?//}}AFX_MSG_MAP
          END_MESSAGE_MAP()

          實現:
          BOOL Input::OnEraseBkgnd(CDC* pDC)
          {
          ?if(m_hBmp)
          ?{
          ??BITMAP bm;
          ??GetObject(m_hBmp,sizeof(bm),&bm);
          ??HDC hMemdc=CreateCompatibleDC(pDC->m_hDC);
          ??if(hMemdc)
          ??{
          ???? HBITMAP hOldBmp=(HBITMAP)SelectObject(hMemdc,m_hBmp);
          ???? if(hOldBmp)
          ???? {
          ????? BitBlt(pDC->m_hDC,0,0,bm.bmWidth,bm.bmHeight,hMemdc,0,0,SRCCOPY);
          ????? SelectObject(hMemdc,hOldBmp);
          ????? DeleteDC(hMemdc);
          ????? DeleteObject(hOldBmp);
          ????? return TRUE;
          ???? }
          ???? else
          ??? DeleteDC(hMemdc);
          ??}
          ?}
          ?return CDialog::OnEraseBkgnd(pDC);
          }

          主站蜘蛛池模板: 万源市| 海兴县| 巫山县| 股票| 桃源县| 灵丘县| 修武县| 宁夏| 织金县| 张家界市| 阳高县| 星座| 五原县| 商河县| 连平县| 凤阳县| 抚松县| 吐鲁番市| 兴义市| 沂南县| 临武县| 奈曼旗| 咸阳市| 明光市| 乳源| 青岛市| 顺平县| 迭部县| 广丰县| 万山特区| 虞城县| 平陆县| 濉溪县| 江达县| 莫力| 濮阳县| 泸溪县| 江门市| 湘潭县| 略阳县| 孟连|