带启动文字界面的对话框程序

(1)新建一个基于对话框的MFC应用程序SplashScreenTest,删除对话框中原有控件。
(2)用画图程序做一个图片,白底黑字,然后加入工程中,资源名IDB_BITMAP1。
(3)添加一个对话框资源,并为其添加类CDlgWork。
(4)在BOOL CSplashScreenTestDlg::OnInitDialog()中的末尾添加代码如下:

    CDC* pDC;
	CDC	 memDC;
	CBitmap	bitmap;
	CBitmap* bmp = NULL;
	COLORREF col;
	CRect rc;
	int	x, y;
	CRgn rgn, tmp;
	pDC = GetDC();
	GetWindowRect(&rc);
	bitmap.LoadBitmap(IDB_BITMAP1);//装载位图
	memDC.CreateCompatibleDC(pDC);
	bmp = memDC.SelectObject(&bitmap);
	rgn.CreateRectRgn(0, 0, rc.Width(), rc.Height());
	//计算得到区域
	for(x=0; x<=rc.Width(); x++)
	{
		for(y=0; y<=rc.Height(); y++)
		{
			//将白色部分取掉
			col = memDC.GetPixel(x, y);//得到像素颜色
			if(col == RGB(255,255,255))
			{
				tmp.CreateRectRgn(x, y, x+1, y+1);
				rgn.CombineRgn(&rgn, &tmp,RGN_DIFF);
				tmp.DeleteObject();	
			}
		}
	}
	if(bmp) 
	{
		memDC.SelectObject(bmp);
	}
	CenterWindow();
	SetWindowRgn((HRGN)rgn,TRUE);//设置窗体为区域的形状
	ReleaseDC(pDC);
	SetTimer(1,2000,NULL);

(5)为CSplashScreenTestDlg添加计时器函数,并添加代码如下:

void CSplashScreenTestDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	KillTimer(1);
	CDialog::OnCancel();
	CDlgWork dlg;
	dlg.DoModal();

	CDialogEx::OnTimer(nIDEvent);
}

引用类CDlgWork文件,代码如下:

#include "DlgWork.h"

(6)为CSplashScreenTestDlg添加显示窗口事件函数WM_SHOWWINDOW,并添加代码如下:

void CSplashScreenTestDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialogEx::OnShowWindow(bShow, nStatus);

	// TODO: 在此处添加消息处理程序代码
	CRect rc,rect;
	GetClientRect(&rc);
	GetWindowRect(&rect);
	rc.left = rect.left;
	rc.top = rect.top;
	rc.right = rc.left + 414;//414是图片宽度
	rc.bottom = rc.top + 100;//100是图片高度
	MoveWindow(&rc,true);
}

(7)保存并运行工程,可以看到程序启动的时候会显示一个文字提示,然后再出现类为CDlgWork的对话框,运行结果如图所示:
带启动文字界面的对话框程序_第1张图片

你可能感兴趣的:(Microsoft,Visual,Studio,2010)