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

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

          Posted on 2006-12-07 16:02 壯士日志 閱讀(468) 評論(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);
          }

          主站蜘蛛池模板: 乌兰察布市| 迁西县| 油尖旺区| 集安市| 斗六市| 灌南县| 陆良县| 镇雄县| 阿图什市| 广宗县| 太原市| 娱乐| 建平县| 中超| 石屏县| 五莲县| 内乡县| 牙克石市| 渭南市| 修武县| 穆棱市| 龙陵县| 忻州市| 江川县| 屏东市| 龙岩市| 平南县| 融水| 江西省| 乳山市| 青州市| 衡阳市| 新丰县| 正阳县| 施甸县| 鲁山县| 扎赉特旗| 林甸县| 高平市| 壶关县| 米脂县|