MFC 编写自己的特色启动窗体...........

本文介绍了一种基于MFC对话框实现启动窗体的方法,通过随机逐块显示位图来制作动态效果,并提供了详细代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看到 VC上面有个能增加启动窗体的向导 不过那个利用向导做出来启动界面代码多 我们根本无从修改 于是我摸索着写了个
启动窗体 基于对话框的启动界面 界面 是一块一块的慢慢显示 ...

涉及到的函数 :
srand((unsigned)time(NULL)); //以时间为轴随机
rand()产生 随机数
CDC::StretchBlt() //从源DC拷贝位图到目的DC 有必要可以对位图进行拉伸和 压缩
Cwnd::CreateEx()创建一个 窗体
AfxRegisterWndClass()函数返回一个已经注册了的窗口类的名字
CDC::CreateCompatibleDC()创建和某DC相兼容的DC
CWnd::CenterWindow()窗体居中
CWnd::UpdateWindow()更新窗体 这时候会 发送WM_PAINT消息 导致 OnPaint函数的调用

下面是代码具体 代码 首先创建一个 MFC基于对话框的应用程序 (一下是步骤 )


1. 定义一个 CHelloWnd 类从CWnd 类派生来


2. CHelloWnd 类添加成员 和函数
public:
void CreateHellWindow();

private:
CBitmap bit;
BITMAP info;

3. 以上添加完成之后增加 WM_PAINT 消息响应函数 void OnPaint() 函数 增加一副位图资源 IDB_BITMAP1;


// 函数1构造函数
CHelloWnd::CHelloWnd()
{
bit.LoadBitmap(IDB_BITMAP1); //加载位图
bit.GetBitmap(&info); //获得位图信息 BITMAP
}


// 函数2 CreateHellWindow()
void CHelloWnd::CreateHellWindow()
{
this->CreateEx(0,
AfxRegisterWndClass(0,LoadCursor(NULL,IDC_ARROW)), //注册窗口类
Hello Window!", //标题
WS_POPUPWINDOW,//style
0,0,
info.bmWidth,// 宽
info.bmHeight,//高
NULL,NULL,NULL);

}

// 函数3 OnPaint() 函数



void CHelloWnd::OnPaint() //调用CWnd类的 UpDateWindow会发送 WM_PAINT消息
{
CPaintDC dc(this);
CDC dcCom;
dcCom.CreateCompatibleDC(&dc); //创建兼容DC
dcCom.SelectObject(&bit); //将位图选到兼容DC中


int x=0,y=0; //随机坐标 DC绘制时候的坐标 都是相对于 客户坐标 而不是屏幕坐标
int num=0 ;//用于记录绘制次数 到100次推出 while
int check[10][10]={0}; //用于判断100个格子是否全部绘制
int stepx=info.bmWidth/10; //设置绘制的每一个小格子的高度
int stepy=info.bmHeight/10; //设置绘制的每一个小格子的宽度
srand((unsigned)time(NULL)); //以时间为轴随机
while(1)
{
x=rand()%10; //产生0-9之间的数字
y=rand()%10; //产生0-9之间的数字
if(check[x][y]) //如果已经绘制直接进入下一个循环
continue;
dc.StretchBlt(x*stepx,y*stepy,stepx,stepy,&dcCom,x*stepx,y*stepy,stepx,stepy,SRCCOPY);

check[x][y]=1 ;
num++;
if(num>=100)
break ;
Sleep(50);
}
}


以上完成之后在 APP类中的 初始化函数 CMyDlg dlg; 对话框生成之前增加如下代码



CHelloWnd *wnd=new CHelloWnd;
wnd->CreateHellWindow();
wnd->ShowWindow(SW_SHOW); //显示窗体
wnd->CenterWindow(); //窗体居中
wnd->UpdateWindow(); //发送WM_PAINT 消息


到这里一个 启动窗体就做好了 大致就是这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值