且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-08-13 08:14:08

 

 今天看到  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 消息 


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