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);
          }

          主站蜘蛛池模板: 库车县| 侯马市| 呼图壁县| 凌海市| 会宁县| 二手房| 平定县| 平罗县| 买车| 临洮县| 库车县| 从江县| 云安县| 三河市| 灵武市| 浦江县| 顺义区| 新泰市| 龙泉市| 龙川县| 山阴县| 怀远县| 哈巴河县| 曲麻莱县| 哈尔滨市| 眉山市| 陇南市| 北京市| 信丰县| 华蓥市| 巫山县| 理塘县| 冷水江市| 韩城市| 拜城县| 射洪县| 岳阳县| 绥芬河市| 年辖:市辖区| 台东县| 防城港市|