1. 程式人生 > >MFC建立一個程式啟動畫面

MFC建立一個程式啟動畫面


在自己寫程式的時候,我們可以為我們自己的程式新增一個類似於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初學者,文中錯漏之處,也請告訴我。