MFC建立一個程式啟動畫面
阿新 • • 發佈:2018-11-11
在自己寫程式的時候,我們可以為我們自己的程式新增一個類似於WORD,VS之類的初始化介面。
具體方法如下:
CString str=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW, AfxGetApp()->LoadCursor(IDC_WAIT),(HBRUSH)(COLOR_WINDOW+1),NULL); CSplashWnd wnd; //用註冊好的類來建立視窗 wnd.CreateEx(WS_EX_CLIENTEDGE,str,_T(""),WS_POPUP,CRect(0,0,0,0),NULL,NULL); //Call this member function to change the size, position, //and Z-order of child, pop-up, and top-level windows. wnd.SetWindowPos(NULL,100,100,wnd.m_bitmap.bmWidth,wnd.m_bitmap.bmHeight,SWP_NOZORDER); //This method centers a window relative to its parent. //If the pop-up window is not owned, it is centered relative to the screen. wnd.CenterWindow(); //Sets the visibility state of the window. wnd.ShowWindow(SW_SHOW); //Send a WM_PAINT msg wnd.UpdateWindow(); ::Sleep(3000); wnd.DestroyWindow();
CSplashWnd是我們自己編寫的CWnd派生類,下面貼出CSplashWnd的相關程式碼。
在其標頭檔案中,聲明瞭:
CBitmap m_CBitmap;
BITMAP m_bitmap;
用以處理初始化介面的點陣圖。
在PreCreteWindow函式中,在視窗建立前,修改其style
if(!CWnd::PreCreateWindow(cs))
return FALSE;
cs.style=WS_POPUP;
然後,在OnCreate中新增
m_CBitmap.LoadBitmap(IDB_BITMAP1); //把m_CBitmap的圖形資訊填充到BITMAP結構的m_bitmap中 m_CBitmap.GetObject(sizeof(BITMAP),&m_bitmap);
m_bitmap填充了IDB_BITMAP1的圖形資訊,其中的寬度高度等資訊後面會用到
然後我們在OnPaint中新增下面程式碼,就大功告成了
CPaintDC dc(this); CDC dcMem; CBitmap *pBmp; CFont font; font.CreatePointFont(150,_T("Times New Roman")); dcMem.CreateCompatibleDC(&dc); //把點陣圖選入到dcMem中。 pBmp=(CBitmap *)dcMem.SelectObject(&m_CBitmap); dc.BitBlt(0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,&dcMem,0,0,SRCCOPY); dc.SelectObject(&font); dc.SetBkMode(TRANSPARENT); dc.SetTextColor(RGB(255,255,0)); dc.TextOut(50,m_bitmap.bmHeight-60,CString("初始化...")); //????? dcMem.SelectObject(pBmp);
最後一行程式碼,本人不明白有什麼意義,還請路過的大神指點。
另外我是VC初學者,文中錯漏之處,也請告訴我。