VC—主架構視窗繪製背景

來源:互聯網
上載者:User

VC—主架構視窗繪製背景  轉自skyremember的專欄

使用VC進行項目開發,特別是簡單的MIS系統開發中,通常在使用者沒有進行操作之前顯示的是主架構的視窗(使用者點擊操作功能表項目再彈出處理視窗)。因 此給主框 架視窗提供一個背景圖片就顯得很有必要(例如一使用者滿意的LOGO等)。但是對於主架構的背景的繪製不能簡單地用ClassWizard重載 OnEraseBkgnd(CDC* pDC)函數的方法實現。

多文件視窗應用程式中的主架構視窗的背景區是一個MDIClient類的視窗,因此改變背 景與這個MDIClient類的視窗有關。MDIClient類的視窗的控制代碼是m_hWndMDIClient(在CMDIFrameWnd中),可以通 過以下步驟實現:

Step 1:在資源中添加一個Bitmap資源,資源標誌符為IDB_BKGOUND;
Step 2:添加一個MDIClient類:Insert——>New Class,選擇MFC Class,基類選擇"generic CWnd",類名為CClientWnd;
Step 3:為CClientWnd添加OnEraseBkgnd(CDC* pDC)(WM_ERASEBKGND),OnSize(UINT nType, int cx, int cy)(WM_SIZE)函數的重載(Class Wizard),並添加虛函數WNDPROC* CClientWnd::GetSuperWndProcAddr():

BOOL CClientWnd::OnEraseBkgnd(CDC* pDC)

{
// TODO: Add your message handler code here and/or call default
CRect rectbk; // 客戶區的大小
CDC dcMen; //記憶體裝置描述表
CBitmap bmbk; // 位元影像對象
bmbk.LoadBitmap(IDB_BKGOUND); // 從資源載入位元影像 bitmap
// 得到位元影像bitmap的大小
BITMAP stBitmap;
bmbk.GetObject(sizeof(BITMAP),&stBitmap);
CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);
dcMen.CreateCompatibleDC(pDC);
// 選入新的位元影像對象並儲存舊的位元影像對象
CBitmap *pold=dcMen.SelectObject(&bmbk);
GetClientRect(&rectbk);
// 從記憶體向螢幕複製位元影像對象
pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMen,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
dcMen.SelectObject(pold);
// 恢複舊的位元影像對象
dcMen.DeleteDC();
// 釋放記憶體裝置描述表
//return CWnd::OnEraseBkgnd(pDC);
return TRUE;
}

void CClientWnd::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
Invalidate(); //大小改變後重畫
}

ClientWnd.h中添加:
virtual WNDPROC* GetSuperWndProcAddr();
ClientWnd.cpp中添加:
WNDPROC* CClientWnd::GetSuperWndProcAddr()
{
static WNDPROC NEAR pfnSuper = NULL;
return &pfnSuper; // 返回函數指標
}

Step 4:為主架構添加背景:
在MainFrm.h中添加:CClientWnd m_wndClient; (添加#include"ClientWnd.h"標頭檔)

在CMainFrame類的OnCreate()事項中添加:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if(!m_wndClient.SubclassWindow(m_hWndMDIClient))//該句為加入
{
TRACE("Fail to subclass MDI client window/n");
return -1;
}
//////省略
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.