MFC启动画面设计
MFC_编写自己的特色对话框启动窗体
MFC 编写自己的特色启动窗体...........今天看到VC上面有个能增加启动窗体的向导不过那个利用向导做出来启动界面代码多我们根本无从修改于是我摸索着写了个启动窗体基于对话框的启动界面界面是一块一块的慢慢显示 ...涉及到的函数:srand((unsigned)time(NULL)); //以时间为轴随机rand()产生随机数CDC::StretchBlt() //从源DC拷贝位图到目的DC 有必要可以对位图进行拉伸和压缩Cwnd::CreateEx()创建一个窗体AfxRegisterWndClass()函数返回一个已经注册了的窗口类的名字CDC::CreateCompatibleDC()创建和某DC相兼容的DCCWnd::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,//style0,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); //创建兼容DCdcCom.SelectObject(&bit); //将位图选到兼容DC中int x=0,y=0; //随机坐标DC绘制时候的坐标都是相对于客户坐标而不是屏幕坐标 int num=0 ;//用于记录绘制次数到100次推出whileint 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,SRCCO PY);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 消息到这里一个启动窗体就做好了大致就是这样。
MFC画图程序步骤
MFC画图程序步骤MFC(Microsoft Foundation Class)是一种用于开辟Windows应用程序的C++类库。
在MFC中,我们可以使用GDI(Graphics Device Interface)来创建和操作图形。
下面是使用MFC创建一个简单的画图程序的步骤。
步骤1:创建一个新的MFC项目首先,打开Visual Studio并选择创建一个新的项目。
在项目类型中,选择Visual C++ -> MFC,然后选择MFC应用程序类型。
输入项目名称并选择保存的位置。
在应用程序类型中,选择“单文档”或者“多文档”视图,具体根据你的需求而定。
点击“确定”按钮创建项目。
步骤2:设计用户界面在MFC应用程序中,用户界面是通过对话框资源来设计的。
在资源视图中,双击IDD_DIALOG(或者其他对话框资源)以打开对话框编辑器。
在对话框编辑器中,你可以添加按钮、文本框、菜单等控件来设计你的用户界面。
在画图程序中,你可以添加一个画布控件来显示绘制的图形。
步骤3:添加绘图功能在MFC中,你可以使用GDI来进行绘图操作。
打开你的对话框类的头文件(例如,CMyDialog.h),添加以下头文件引用:#include <afxwin.h>#include <afxext.h>#include <afxdisp.h>在对话框类的源文件(例如,CMyDialog.cpp)中,添加以下代码来处理绘图操作:```void CMyDialog::OnPaint(){CPaintDC dc(this); // 用于绘制的设备上下文// 在这里进行绘图操作dc.Rectangle(100, 100, 200, 200); // 绘制一个矩形dc.Ellipse(300, 100, 400, 200); // 绘制一个椭圆}```步骤4:处理绘图事件在对话框类的消息映射中添加对绘图事件的处理。
mfc界面设计教程
mfc界面设计教程MFC(Microsoft Foundation Classes)是一套用于开发Windows平台上图形用户界面(GUI)的C++类库。
MFC界面设计是开发Windows应用程序中不可或缺的一部分。
本文将向您介绍一些MFC界面设计的基本原则和技巧,帮助您创建出具有吸引力和用户友好的应用程序界面。
首先,设计一个清晰的用户界面是至关重要的。
您需要确保您的应用程序界面布局简洁明了,易于导航。
使用适当的菜单和工具栏来组织您的功能,使用户能够方便地找到和使用这些功能。
避免界面过于拥挤或混乱,这会给用户带来困惑和不满。
其次,选择合适的颜色和字体可以提升您应用程序界面的外观。
一般来说,最好选择与您应用程序主题相关的颜色,并确保文字清晰可读。
避免使用太多花哨的字体或颜色,这可能会让用户感到眼花缭乱。
另外,为您的界面添加一些可视化元素也是一个不错的选择。
例如,您可以使用图标来表示不同的功能或操作,这有助于用户更快地识别和理解这些内容。
您还可以考虑使用一些动画效果或过渡效果来吸引用户的注意力,但要确保这些效果不会分散用户的注意力或降低应用程序的性能。
此外,考虑到用户的反馈是很重要的。
您可以通过使用弹出窗口、对话框或状态栏来向用户显示相关的提示信息,告知他们当前的操作状态或发生的错误。
提供适当的错误处理机制也非常重要,以便用户能够轻松地解决问题或进行必要的更正。
最后,测试是一个不可忽视的环节。
在设计和开发过程中,您应该经常测试您的界面,以确保它在不同屏幕分辨率和操作系统上都能够正常显示和工作。
同时,您还应该进行用户体验测试,以了解用户对您设计的界面的感受和反馈,并根据需要进行相应的修改和改进。
总结起来,MFC界面设计需要注意清晰布局、合适的颜色和字体、可视化元素、合理的反馈机制以及充分的测试。
通过遵循这些原则和技巧,您可以创建出用户友好和吸引人的应用程序界面。
希望本文对您的MFC界面设计有所帮助!。
在VC++中制作启动屏幕的新方法
在VC++.net中制作启动屏幕的新方法在利用VC++.net编程过程中,遇到制作启动屏幕的问题,几经试验,得出一种方便简单的制作方法。
基本原理是利用对话框窗口的特性,在启动时首先创建对话框,设置一个获得位图文件的句柄,利用Picture控件的SetBitmap(HBITMAP hBitmap)方法,使位图文件充满整个P icture控件窗口,最后设置定时器,整个启动屏幕就制作完成。
下面介绍具体实现步骤。
1. 打开的开发环境,新建VC++.net中的MFC应用程序,输入工程名称MyS ample,点击“确定”,“完成”;2. 打开资源视图,添加对话框,更改ID为ID_DIALOG_SPLASH,设置对话框Cent er属性为True,Border属性为“无”;3. 在对话框中添加Picture控件,设置Picture控件的ID号为ID_PIC,Type属性为“位图”,Center image属性为True,然后调整标尺使对话框没有外框,调整对话框的大小以适应启动屏幕的要求,调整Picture的宽高使其充满整个对话框窗口;4. 双击对话框窗口,弹出类向导对话框,在类名中键入CSplash,选择基类为Cdialo g,点击确定,定义控件Picture的控件变量为m_pic;5. 在Csplash类中重载OnInitDialog()函数,添加消息WM_CHAR,WM_TIMER,W M_LBUTTONUP,WM_MBUTTONUP,WM_RBUTTONUP;6. 在OnInitDialog()函数中添加代码如下:7. 在OnTimer(UINT nIDEvent) 函数中添加代码如下:8. 在OnLButtonUp,OnLButtonUp,OnLButtonUp,OnChar函数中加入以下代码:9. 在MySample.Cpp中引入头文件在InitInstance()函数中加入代码:至此,启动屏幕就Ok了!VC++工程中加入SplashScreen摘要本文旨在剖析VC++工程中加入SplashScreen 的原理,并给出在VC++ MFC(exe)工程中加入SplashScreen 的步骤。
VS2008下面MFC中添加启动画面
在VC6.0时代,我们通过在MFC工程中插入Splash组件来简单方便的实现这个功能,但在VS2008以后就没有了这个功能,所以如果想给自己的程序添加一个显示Logo的启动画面,就需要自己添加代码来实现,参考了下VC6.0中这个Splash组件添加后的代码,就很容易在自己的项目里实现这个功能。
如下图(来自网络)。
本文以VS2008为例做一个演示:首先,在菜单的“项目”中选择“添加类”->”c++类”,生成一个启动画面的Splash类。
然后,实现代码主要是在CwzdSplash类的头文件和cpp文件中实现。
在CwzdSplash类的头文件中我们添加下面的代码:#pragma once// CWzdSplashclass CWzdSplash : public CWnd{DECLARE_DYNAMIC(CWzdSplash)public:CWzdSplash();virtual ~CWzdSplash();protected:DECLARE_MESSAGE_MAP()public:CBitmap m_bitmap;// void Create(void);void Create(UINT nBitmapID);afx_msg void OnPaint();afx_msg void OnTimer(UINT_PTR nIDEvent);};在CwzdSplash类的cpp文件中我们添加下面的代码:// WzdSplash.cpp : 实现文件//#include "stdafx.h"#include "TinyPlusCompiler.h"#include "WzdSplash.h"// CWzdSplashIMPLEMENT_DYNAMIC(CWzdSplash, CWnd) CWzdSplash::CWzdSplash(){}CWzdSplash::~CWzdSplash(){}BEGIN_MESSAGE_MAP(CWzdSplash, CWnd) ON_WM_PAINT()ON_WM_TIMER()END_MESSAGE_MAP()// CWzdSplash 消息处理程序void CWzdSplash::Create(UINT nBitmapID) {m_bitmap.LoadBitmap(nBitmapID);BITMAP bitmap;m_bitmap.GetBitmap(&bitmap);//CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0 ,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0);CreateEx(0,AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),NULL, WS_POPUP | WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL , NULL);}void CWzdSplash::OnPaint(){// TODO: 在此处添加消息处理程序代码// 不为绘图消息调用CWnd::OnPaint()CPaintDC dc(this); // device context forpaintingBITMAP bitmap;m_bitmap.GetBitmap(&bitmap);CDC dcComp;dcComp.CreateCompatibleDC(&dc);dcComp.SelectObject(&m_bitmap);// draw bitmapdc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY);}void CWzdSplash::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值//CWnd::OnTimer(nIDEvent);DestroyWindow(); //销毁初始画面窗口}最后在项目的主窗口视图的Create函数中添加下面的实例化过程就可以显示出我们自定义的Logo启动画面了:CWzdSplash wndSplash; //创建启动窗口类的实例wndSplash.Create(IDB_SPLASH);wndSplash.CenterWindow();wndSplash.UpdateWindow(); //send WM_PAINTSleep(1500);wndSplash.DestroyWindow();//销毁初始画面窗口注明一下要注意的地方:wndSplash.Create(IDB_SPLASH);中的IDB_SPLASH是在添加位图资源时添加进来的资源ID,自己可以定义自己所喜欢的启动图画。
MFC界面设计
画直线:ye在cview 中加入private:CPoint m_point; //自己加的在onlbutoondown 加入m_point=point; //自己加的在onlbuttonup 加入HDC hdc; //自己加的hdc=::GetDC(m_hWnd);MoveToEx(hdc,m_point.x,m_point.y,NULL);LineTo(hdc,point.x,point.y);::ReleaseDC(m_hWnd,hdc); //自己加的完成功能圆,直线,矩形的画法ye1首先在菜单添加各种ID然后定义一个变量m_way赋予不同的值然后增加鼠标按下和弹起的函数处理根据m_way的值按下:m_point=point;保存点的相关信息弹起:CClientDC dc(this);CPen pen(m_linestyle1,m_linewidth,RGB(255,0,0));dc.SelectObject(&pen);CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));dc.SelectObject(pbrush);switch(m_way){case 1:dc.SetPixel(point,RGB(255,0,0));break;case 2:dc.MoveTo(m_point);dc.LineTo(point);break;case 3:dc.Rectangle(CRect(m_point,point));break;case 4:dc.Ellipse(CRect(m_point,point));break;}再定义一个类:实现设置不同的线宽和线形,在弹出框进行编写加载位图:ye2首先构造一幅位图(不是位图的可以转化为位图在加载),然后增加一个消息处理BOOL CY e2View::OnEraseBkgnd(CDC* pDC)CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2);CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);dcCompatible.SelectObject(&bitmap);CRect rect;GetClientRect(&rect);pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);return TRUE;//return CV iew::OnEraseBkgnd(pDC);第二种情况BOOL CY e2View::OnEraseBkgnd(CDC* pDC){// TODO: Add your message handler code here and/or call defaultCBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2);BITMAP bmp;bitmap.GetBitmap(&bmp);CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);dcCompatible.SelectObject(&bitmap);CRect rect;GetClientRect(&rect);//pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp. bmHeight,SRCCOPY);return TRUE;//return CV iew::OnEraseBkgnd(pDC);}图片根据大小而放大缩小渐变:ye3先定义一个变量int width;然后在oncreat函数里输入如下函数调用SetTimer(1,100,NULL);最后开辟一个time消息做如下处理:void CYe3View::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultwidth+=5;CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);CRect rect;rect.left=0;rect.top=200;rect.right=width;rect.bottom=rect.top+tm.tmHeight;dc.SetTextColor(RGB(255,0,0));CString str;str.LoadString(ID_XIANSHI);dc.DrawText(str,rect,DT_LEFT);rect.top=150;rect.bottom=rect.top+tm.tmHeight;dc.DrawText(str,rect,DT_LEFT);CSize sz=dc.GetTextExtent(str);if(width>sz.cx){width=0;dc.SetTextColor(RGB(0,255,0));dc.TextOut(0,200,str);//dc.DrawText(str,rect,DT_LEFT);}CView::OnTimer(nIDEvent);}动态的画线先实现画线的代码然后在菜单中添加一个按钮实现触发SetTime()函数定时的发送TIME消息增加消息处理是捕获time消息,改变线长不断画线。
我整理的MFC界面美化
我整理的MFC界面美化一,对话框背景为一幅位图1.插入位图打开VC6.0MFC程序,右击“Dialog”,打开“引入”,选择图片就可以引入一个位图了。
2.打开“ClassView”,再打开“CAbouttDlg()”函数,找到void CTuxingDlg::OnPaint()函数,粘贴上CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1是你自己的图对应的IDBITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);二.在对话框上显示一幅位图法一:把图片引入工程,其句柄名为IDB_BITMAP2;然后放一个静态控件或者图片控件到对话框上,将其句柄名设为IDC_SHOWBMP; 具体代码为在需要使用的地方(如按钮函数或OnInitDialog()或OnPaint()里等等)加入如下代码:CStatic *p =(CStatic *)GetDlgItem(IDC_SHOWBMP);HBITMAPhBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESO URCE(IDB_BITMAP2));p->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);p->SetBitmap(hBitmap);详解:CStatic *p =(CStatic *)GetDlgItem(IDC_SHOWBMP); //获得指向IDC_SHOWBMP的指针,并将其强制转换为CStatic*类型,并赋值给pHBITMAPhBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESO URCE(IDB_BITMAP2));//从工程资源处获得IDB_BITMAP2的位图句柄,并将其赋值给hBitmap变量p->Modifystyle(0xF,SS_BITMAP|SS_CENTERIMAGE);//设置该静态控件(p指向的静态控件),使其用于显示位图,并且是在控件中央显示//(若无此步无法显示,因为没有说明静态对话框要显示的类型是什么)p->SetBitmap(hBitmap);//将需要显示的位图设置为bBitmap,即资源IDB_BITMAP1的句柄法二:通过位图所在路径显示位图(此方法无需事先将位图文件添加为该工程的资源) 在对话框上放一个静态控件(一定是静态控件,若图片控件则无法显示) 将其重命名为IDC_BMP(不重命名的话无法添加变量),然后再为该控件添加一个变量,命名为m_image.在需要使用的地方(如按钮函数或OnInitDialog()或OnPaint()里等等)加入如下代码: this->m_image.ModifyStyle(0,SS_BITMAP |SS_CENTERIMAGE);HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);this->m_image.SetBitmap(hBmp);详解:this->m_image.ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);//和上面的作用一样,将该静态控件设置为是用来显示位图的,只不过这里是通过该静态对话框的变量来进行/ /modifystyle操作的HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //从bmp文件所在的路径直接读取该bmp图象的句柄,并将其转换为HBITMAP类型//注:其中的"path\\1.bmp"是相对路径,即在和可执行文件的同一目录下有一个名为path的文件夹,里面有一个名为1.bmp的位图文件.this->m_image.SetBitmap(hBmp); //通过变量m_image来设置该静态框所显示的位图文件.三.列表控件的背景在BOOL CTuxingDlg::OnInitDialog()函数中添加以下代码m_List.SetBkColor(RGB(444, 233, 255)); //三个参数可以任意改变,下同m_List.SetTextBkColor(RGB(444, 233, 255));四.设置列表控件属性带有表格线在BOOL CTuxingDlg::OnInitDialog()函数中添加以下代码DWORD NewStyle = m_List.GetExtendedStyle();NewStyle |= LVS_EX_GRIDLINES; m_List.SetExtendedStyle(NewStyle);五.改变全部界面的背景颜色点击“Globals”,再打开“theApp”,在Bool CPersonalFinancialManagementSystemApp::InitInstance()函数中添加SetDialogBkColor(RGB(444, 233, 255), RGB(0, 0, 0));。
第2章 MFC程序的界面设计与资源管理
2. 直接选择法
选择dsw后缀的文件
2.2.2 浏览应用程序资源
2.2.3 增加新资源
右键点击MyHello resources,选插入...
选中Dialog,点击新建
新建了名为IDD_DIALOG1的新对话框
2.2.4 删除资源
选中IDD_DIALOG1,按Del键
2.3 资源编辑器
2.3.1 快捷键Accelerator
双击Accelerator->IDR_MAINFRAME,显示资源列表
右键,新建加速栏
定义快捷键对应关系
2.3.2 对话框Dialog
1. 创建对话框: 1)插入新资源
2)改变对话框属性
3)改变“ID”;改变“
标题”
2. 编辑对话框资源: 1)删除确定和取消按钮
双击
2. 新添一个菜单项:1)双击IDR_MAINFRAME
2)改变“ID”;改变“标明”;改变“提示”
3)结果显示
2.3.5 字符串表String Table
(应用程序的所有事件的对应的标识号、内部值及其说明的表)
双击String Table->字串表,可看到刚才的ID_MYMENU
双击可编辑String属性
2.3.6 工具栏Toolbar
1. 编辑工具栏按钮,与图标编辑类似
2. 设置工具栏按钮
3. 结果显示
说明:一个工具栏全部按钮图标保存在一个位图文件中
第2章 MFC程序的界面设计 与资源管理
2.1 资源与界面
资源: – 菜单Menu,图标Icon,对话框Dialog,位图 Bitmap,快捷键Accelerator,工具栏Toolbar, 光标Cursor,版本描述Version,字符串表 String Table
MFC框架窗口界面设计(共58张PPT)
pStatus->SetPaneText(1,str);
二个窗格的文本
// wParam的低字节表示菜单、控件、加速键的命令ID
(3) 图形编辑器工作窗口的控制条上,单击“New Device Image”,单击[定制]。
// 更新第
FWS_ADDTOTITLE
1框架窗口
(6)在第四步对话框中,单击[高级], 如图,分别用于文档模板字串资源 内容和窗口风格的修改。
▪ 文档窗口一般都有相应的可见边框,它的客户区(除了窗口标题栏、边框外的区 域)是由相应的视图来构成的,因此可以说视图是文档窗口内的子窗口。文档窗 口时刻跟踪当前处于活动状态的视图的变化,并将用户或系统产生的消息传递给 当前活动视图。
1框架窗口
MFC AppWizard为每个窗口设置了相应的大小和位置。
ClassWizard信息文件
(9) 为CM.adinsFpr(aDmeev类el添o加peWrSMt_uSdEiToCUPRroSjOeRc的t)消息映射函数,项增目加代文码件:
(2) 在CMai.npFrlagme类添加WM_CONTEXTMENU消息映射,函数编代码译。信息文件
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
➢ 除了上述风格外,框架窗口还有以下三个自己的风格。它们都可以在PreCreateWindow重载 函数的CREATESTRUCT结构中指定。
➢ FWS_ADDTOTITLE 该风格指定相关的信息如文档名添加到框架窗口标题的后面。
➢ FWS_PREFIXTITLE 该风格使得框架窗口标题中的文档名显示在应用程序名之前。
// 显示窗口
m_pMainWnd->UpdateWindow();
MFC界面设计
MFC界面设计前两天boss让写写界面,看程序看的头晕脑转,就在网上瞎搜搜,写些关于MFC的界面设计。
包括:窗体背景图、窗体大小、按钮背景图、控件透明、编辑框重影、exe图标、托盘程序。
下面逐一代码解析:窗体背景图:背景图,要在OnPaint() 函数中进行修改。
窗体不再使用默认,在else中添加代码[cpp] view plaincopyprint?//改变窗体大小MoveWindow(0,0,500,400,TRUE);//设置背景CPaintDC dc(this);CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2);//在资源里添加的位图名CBrush brush;brush.CreatePatternBrush(&bitmap);CBrush* pOldBrush = dc.SelectObject(&brush); dc.Rectangle(0,0,600,400); //宽、长;dc.SelectObject(pOldBrush);//CDialog::OnPaint();按钮背景图:[cpp] view plaincopyprint?CBitmapButton m_BitmapButton;//声明按钮位图对象实现代码:[cpp] view plaincopyprint?//按钮添加图片m_BitmapButton.LoadBitmaps(IDB_BITMAP1);//位图名称m_BitmapButton.SubclassDlgItem(IDC_BConn,this);//按钮ID,句柄m_BitmapButton.SizeToContent();//把按钮设置成位图大小控件透明:重载OnCtlColor函数。
有的控件需要修改OwnerDraw属性为True。
[cpp] view plaincopyprint?afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);//透明添加消息函数:[cpp] view plaincopyprint?BEGIN_MESSAGE_MAP(CClientDlg, CDialog)//......ON_WM_CTLCOLOR()//透明//}}AFX_MSG_MAP//......END_MESSAGE_MAP() 实现:[cpp] view plaincopyprint?//重载——透明HBRUSH CClientDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hBrush = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// <SPAN style="WHITE-SPACE: pre"></SPAN>CTLCOLOR_BTN Button control//按钮// CTLCOLOR_DLG Dialog box//对话框// CTLCOLOR_EDIT Edit control//编辑框// CTLCOLOR_LISTBOX List-box control//列表框// CTLCOLOR_MSGBOX Message box//消息框// CTLCOLOR_SCROLLBAR Scroll-bar control// CTLCOLOR_STATIC Static control//——这些控件都能设置透明if(nCtlColor == CTLCOLOR_EDIT){pDC->SetBkMode(TRANSPARENT); //设置透明pDC->SetTextColor(RGB(255, 0, 255)); // 设置文本颜色return(HBRUSH)::GetStockObject(NULL_BRUSH);}return hBrush;编辑框重影:添加消息框的事件处理函数OnEnChange,[cpp] view plaincopyprint?//方法1CRect rtlbl;GetDlgItem(IDC_EPort)->GetWindowRect(&rtlbl); ScreenToClient(&rtlbl); //转到客户端界面InvalidateRect(&rtlbl);//刷新对话框背景////方法二GetDlgItem(IDC_EPort)->GetParent()->RedrawWindow();//会闪动exe图标:如果资源里的图标有多个,exe会自动选择较小的作为自己的图标。
MFC框架窗口界面设计
MFC框架窗口界面设计MFC(Microsoft Foundation Classes)是一个用于开发Microsoft Windows应用程序的C++类库。
MFC提供了一整套用于创建Windows应用程序的类和函数,其中包括窗口界面设计。
本文将探讨MFC框架窗口界面设计的一些关键方面。
首先,MFC框架中的窗口界面设计基于窗口类。
每个窗口类都有一个相应的类对象,用于管理窗口的创建、显示、隐藏以及事件处理等。
设计MFC窗口界面时,首先需要确定窗口的布局和功能。
通常,应该继承自CWnd类,CWnd类是MFC框架中窗口类的基类。
其次,MFC框架提供了丰富的控件类,可以用于设计窗口界面的各种元素,例如按钮、文本框、列表框、菜单、工具栏等等。
开发者可以根据实际需求选择并配置适当的控件类,并根据需要调整控件的位置和大小,以实现所需的窗口界面。
MFC框架还提供了对话框类CDialog,用于设计对话框窗口。
对话框是一种特殊的窗口,通常用于显示和接收用户输入的信息。
开发者可以使用对话框模板设计器来设计对话框的布局,并通过类成员变量和控件关联实现对对话框中各个控件的操作。
在MFC框架中,窗口界面设计通常采用消息映射的方式。
通过在窗口类中添加消息映射函数,可以实现对窗口消息的处理。
开发者可以根据需要添加相应的消息映射函数,处理窗口消息并执行相应的操作。
例如,当用户点击按钮时,可以响应WM_COMMAND消息,并执行与该按钮相关的操作。
此外,MFC框架还提供了一些辅助类和函数,用于简化窗口界面设计的过程。
例如,CDialogEx类是对话框类的一个扩展类,提供了一些额外的功能,如主题支持和阻止空格键输入等。
另外,MFC框架还提供了一些用于绘制窗口界面的绘图类和函数,例如CDC类和绘图函数。
总的来说,MFC框架提供了丰富而强大的工具和类库,用于设计和开发Windows应用程序的窗口界面。
通过合理选择和配置窗口类、控件类和对话框类,并使用消息映射和辅助类,开发者可以很容易地实现自定义的、具有丰富功能的窗口界面。
MFC界面设计范文
MFC界面设计范文MFC(Microsoft Foundation Classes)是微软的一套C++类库,用于快速开发Windows应用程序的用户界面。
MFC界面设计也涉及到对用户界面元素的布局和外观的管理。
开发人员可以使用MFC提供的布局工具来控制窗口和控件在用户界面中的位置和大小。
同时,MFC还提供了一系列的图形和文字绘制函数,开发人员可以使用这些函数来设计和定制用户界面的外观。
MFC界面设计通常采用面向对象的开发方法。
开发人员可以通过继承和重载MFC提供的类来定制和扩展用户界面的功能。
同时,MFC还提供了一系列的通用类和控件,开发人员可以直接使用这些类和控件来快速开发用户界面。
在进行MFC界面设计时,开发人员需要考虑以下几个方面:1.用户需求:开发人员需要清楚了解用户的需求和期望,设计出符合用户期望的界面。
2.界面布局:开发人员需要合理安排界面中窗口和控件的位置和大小,使界面看起来美观和易用。
3.用户交互:开发人员需要处理用户输入和操作,包括鼠标点击、键盘输入等操作,并根据用户操作来更新用户界面。
4.界面美化:开发人员可以使用MFC提供的绘图函数和控件样式设置来美化用户界面,使其看起来更加吸引人。
5.效率和性能:开发人员需要考虑用户界面的响应速度和性能,避免界面出现卡顿或响应慢的情况。
在进行MFC界面设计时,可以参考以下几点建议:1. 参考现有界面:可以参考和借鉴现有的Windows应用程序界面,学习其设计理念和布局方式。
2.用户测试:在设计过程中可以进行用户测试,收集用户的反馈意见和建议,修正和改进界面设计。
3.界面组件的选择:根据功能需求选择合适的界面组件,例如使用列表框、树形控件来展示数据。
4.风格统一:尽量保持界面的风格和样式统一,使用户界面看起来整洁和一致。
5.错误处理:在界面设计中需要考虑错误处理和异常情况,及时提供用户友好的提示和帮助信息。
总之,MFC界面设计是Windows应用程序开发中重要的一环,它关系到用户体验和使用效果。
MFC启动画面设计
MFC启动画面设计之袁州冬雪创作玩过微软的Office的人都知道,每当打开Office软件,在它初始化的那段时间里,都会出现一个画面,这个画面就是启动画面.所谓启动画面也就是Splash Screen,你也可以说它是“炫耀画面”.它经常常使用以显示公司的标记和版权等信息.方针用一张位图来作为启动画面,在进入程序时显示.战略在应用程序类的I n i t I n s t a n c e ()函数中,在最早时刻创建启动窗口.启动窗口用一个位图类显示在普通窗口中.步调1.创建一个启动窗口类1)用ClassWizard创建一个从一般CWnd类(当然也可以是CFrameWnd类)派生的普通窗口类.如图所示:2)添加Create()成员函数到该类,在该函数中装入启动窗口中显示的位图,以及在屏幕中央创建该窗口.void CWzdSplash::Create(UINT nBitmapID){m_bitmap.LoadBitmap(nBitmapID);BITMAP bitmap;m_bitmap.GetBitmap(&bitmap);int x=(::GetSystemMetrics(SM_CXSCREEN)-bitmap.bmWidth)/2;int y=(::GetSystemMetrics(SM_CYSCREEN)-bitmap.bmHeight)/2;CRectrect(x,y,x+bitmap.bmWidth,y+bitmap.bmHeight);CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_ VISIBLE|WS_BORDER,rect,NULL,0);}3)用ClassWizard添加一个WM_PAINT消息处理函数到该窗口类中,在这里用BitBlt()把位图绘制到屏幕上.void CWzdSplash::OnPaint(){CPaintDC dc(this); // device context for painting BITMAP bitmap;m_bitmap.GetBitmap(&bitmap);CDC dcComp;dcComp.CreateCompatibleDC(&dc);dcComp.SelectObject(&m_bitmap);// draw bitmapdc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcC omp,0,0,SRCCOPY);}2.把启动窗口类拔出到InitInstance()函数中1) 在应用程序类的InitInstance()函数的开端处,创建该启动类的一个实例,调用它的Create(),并强制它停止绘制.CWzdSplash wndSplash;//创建启动窗口类的实例wndSplash.Create(IDB_BITMAP1);wndSplash.UpdateWindow();//send WM_PAINT2) 因为启动窗口类创建在堆栈中,一旦InitInstance()返回,该窗口将被自动销毁,因此,如果应用程序花费大量时间停止初始化,则不必采取在应用程序中加延时的方法,使启动窗口停留足够长的时间以确保读取显示的信息;如果应用程序花费很少时间停止初始化,或者担心高速机器把启动窗口变成影像,添加下面代码行到InitInstance( )的某个地方以对应用程序停止延时处理. // add if splash screen too shortSleep(2000);至此,一个具有启动画面的小程序完成了,大家可以试试看它的运行效果.。
MFC框架窗口界面设计
MFC框架窗口界面设计MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++框架。
它提供了一套面向对象的API,使开发人员能够快速创建Windows GUI应用程序。
在MFC框架中,窗口界面设计是非常重要的一部分,良好的界面设计可以提升用户体验,使应用程序更加易于使用和理解。
在进行MFC窗口界面设计时,需要考虑以下几个方面:1.窗口布局:首先要考虑的是窗口的布局。
通过合理的布局可以使窗口界面看起来整洁、统一,并且便于用户操作。
可以使用容器控件(如面板、分组框)来划分窗口区域,并使用控件对界面进行进一步的细分和排列。
3.控件排列:选择合适的控件后,需要对它们进行合理的排列。
可以使用布局管理器(如网格布局、堆栈布局)来自动调整控件的位置和大小,以适应不同窗口大小的变化。
同时,应该考虑控件之间的间距和对齐方式,使界面看起来更加整齐美观。
4.界面元素:除了基本的控件外,还可以添加一些界面元素来增强用户体验。
比如图标、图片、背景色等。
这些元素可以帮助用户更好地理解应用程序的功能和状态,并增加界面的可视化效果。
5.字体和颜色:选择合适的字体和颜色可以改善界面的可读性和视觉吸引力。
应该选择易于阅读的字体,并确保文字和背景颜色的对比度足够高,使用户能够清晰地看到和理解界面上的信息。
6.响应式设计:现代应用程序通常需要适应不同分辨率和窗口大小的设备,因此,响应式设计变得越来越重要。
在MFC框架中,可以使用响应式布局和弹性控件来实现窗口界面的自适应性。
这样,无论应用程序在大屏幕、小屏幕还是移动设备上运行,都能保持良好的用户体验。
7.错误处理和反馈:在设计窗口界面时,要考虑用户输入错误或操作失误的情况,并提供相应的错误处理和反馈机制。
比如,在输入框中输入无效数据时,可以显示错误提示信息或闪烁该输入框,以引起用户的注意。
总之,MFC框架窗口界面设计需要考虑布局、控件选择和排列、界面元素、字体和颜色、响应式设计,以及错误处理和反馈等方面。
WinCE MFC(基于对话框)界面设计
基于对话框的界面设计Wang Wenjiang,2006,05项目的建立打开MicrosoftVisualStudio2005按照“文件|新建|项目|智能设备|MFC智能设备应用程序|项目名称(这里以DlgTest为例)|基于对话框”顺序新建项目.应用程序的入口和界面的初始化选中类视图,会发现自动生成了两个新类CDlgTestApp和CDlgTestDlg.在类CDlgTestApp中成员函数InitInstance就是对话框应用程序的入口(注:在win32应用程序中是WinMain函数).在InitInstance函数中将对话框类事例化(CDlgTestDlg dlg),并将CDlgTestDlg型变量dlg的地址指针赋给全局的窗口指针pMainWnd,即pMainWnd=&dlg.接下来执行CDlgTestDlg的基类CDialog的成员函数DoModal,进而执行CDlgTestDlg的成员函数OnInitDialog实现对话框界面的初始化工作(注:在这里可以加入自己的一些界面显示前的初始化代码).界面的设计展开资源视图中Dialog下的IDD_DLGTEST_DIALOG就会出现对话框面板,然后就可以用右边的工具箱中的控件非常方便的进行界面的删除和增加等功能设计了.下面我用一个简单的实现加法的例子讲述如何在界面控件间传递数据.1.界面设计如下,控件ID从左向右依次为IDC_EDIT_X,IDC_STATIC_ADD,IDC_EDIT_Y,IDC_BTN_EQ,IDC_EDIT_Z.注意控件ID命名要养成一个好的习惯,以免界面复杂时,逻辑不清,给以后修改带来麻烦!2.分别为IDC_EDIT_X,IDC_EDIT_Y,IDC_EDIT_Z添加double型的全局public型变量,分别为m_x,m_y和m_z(注:一般成员变量前加m_,以便和其他变量相区分).3. 为IDC_BTN_EQ添加事件处理程序,如图选中添加编辑即可.变量初始化CDlgTestDlg::CDlgTestDlg(CWnd* pParent /*=NULL*/): CDialog(CDlgTestDlg::IDD, pParent), m_x(0), m_y(0), m_z(0){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}以上是系统自动生成的代码,也可以按以下方式初始化CDlgTestDlg::CDlgTestDlg(CWnd* pParent /*=NULL*/): CDialog(CDlgTestDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_x=0;m_y=0;m_z=0;}至于怎样写那就看你的习惯了,不过我用第二种方法比较多.数据传递和添加代码void CDlgTestDlg::OnBnClickedBtnEq(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//数据从界面传入变量.m_z=m_x+m_y;UpdateData(FALSE);//用变量新值刷新界面.}如何定义和使用全局函数为了便于管理,最好把同类的函数放到同一模块,例如:添加头文件MyMath.h// MyMath.h//#pragma onceextern double Add(double a,double b);extern double Sub(double a, double b);添加源文件MyMath.cpp// Math.cpp//double Add(double a,double b){return a+b;}double Sub(double a, double b){return a-b;}如果要使用以上函数,只要包含头文件MyMath.h即可,这和以往纯C代码的用法是一样的.。
MFC建立一个简单的图形界面的过程的截图
MFC建立一个简单的图形界面的过程的截图
1、安装并打开Visual C++
2、文件/新建后出现
3、选择,并在工程名称后写上名称,即工程名
4、点击下一步出现
5、选择基本对话框
6、点击下一步出现
7、按默认点击下一步只到完成点击即可,如下所示
点击确定即可出现如图所示:
可在右边的控件中选择相应的控件到左边的界面中。
到此完成简单的界面建立
添加文本:
在控件中点击静态文本,在左侧用鼠标拖动形成如图所示的文本如图所示:
选择静态文本,按下enter键,出现如图所示:
点击常规出现:
其中标题原来是Static,可以改成你定义的数值,这里改为用户名在控件中选择编辑框,可输入内容,如图:
同上添加密码:如下图所示:
把密码的编辑框改为密码不可见形式
选择密码的编辑框,按下enter键,出现如图所示:
点击样式,选择密码,如图所示:
制作过程完结,结果如下图所示:
按下F5运行,出现运行结果如下:。
vc做启动界面
VC/MFC如何添加启动界面1、利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h 这两个文件(也就是基于框架类的应用程序添加启动画面的步骤)(1)用Photoshop等制作启动画面图像,保存为bmp格式。
(2)用Appwizard建一个基于单文档的工程Splash。
(3)在资源中插入位图资源打开VC++的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图。
如果位图超过256色,VC会弹出一个对话框,提示位图已经插入但不能在位图编辑器中显示,确定即可。
将位图ID改为IDB_SPLASH。
(4)添加Splash Screen控件①选择菜单“project”/“Add To Project”/“Conponents and Controls”打开对话框,在列表框中双击“Visual C++ Conponents”选项,选择“Splash Screen”控件,然后单击“Insert”。
②确认或修改类名和位图资源ID,单击OK确认。
③编译、连接,漂亮的启动画面就显示出来了。
(5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750 毫秒。
该函数所在位置:int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct){...// Set a timer to destroy the splash screen.SetTimer(1, 2000, NULL); //修改第二个参数以调整画面停留时间return 0;}这样就生成了Splash1.cpp 和Splash1.h 这两个文件2、制作基于对话框的应用程序启动画面(1)建立基于对话框的工程Cover。
(2)文件移植①将Splash1.cpp 和Splash1.h 两个文件从步骤一建立的工程拷贝到Cover工程中,并且分别加入到Source Files和Header Files中;②导入位图文件到工程的资源中,改ID为IDB_SPLASH。
基于MFC的对话框程序加启动画面
基于MFC的对话框程序加启动画面基于MFC的对话框程序加启动画面2012-04-10 17:22 102人阅读评论(0) 收藏举报对于比较大的程序,在启动的时候都会显示一个画面,以告诉用户程序正在加载,或者显示一些关于软件的信息,如Visual C++,Word, PhotoShop等。
这些启动画面在Visual C++中怎么实现呢?对于文档/视图结构的程序,可以直接使用VC提供的SplashWnd组件。
可是在基于对话框的程序却不能使用SplashWnd组件。
因此只能自己来实现此功能。
因为显示启动画面的同时还要进行程序的加载工作,所以要用到多线程。
MFC区分了两种不同类型的多线程:用户界面(UI)线程和工作者线程。
两者的区别是UI线程有消息循环,而工作者线程没有,UI线程能够创建窗口并处理发送给窗口的消息。
工作者线程用来执行后台任务,这些后台任务不直接接受用户输入,因此不需要窗口和消息循环。
因为这里要显示一个画面,所以要使用UI 线程。
下面结合我做的一个小软件“实用闹钟”来说明如何为对话框程序制作启动画面。
打开Visual C++建立一个对话框工程Page. 首先准备一副位图资源插入到工程中,作为启动时显示的画面。
再插入一个对话框,设置ID为IDD_SPLASH。
在上面放一个picture控件,类型设为”Bitmap”,图象选择刚才插入的位图。
设置对话框的Style为Popup,Border 为None,去掉Title Bar属性,并调整对话框的大小与位图等大,这样对话框显示的时候,你看到的只是图片。
打开ClassWizard为此对话框建立一个新类CSplashDlg, 基类为CDialog.UI线程是由一个动态可创建的类来控制,该类是从CWinThread派生的,非常类似从CWinApp派生的一个应用程序类.打开ClassWizard建立一个由CWinThread派生的类----CSplashThread,在SplashThread.h 中加入#include"SplashDlg.h",并添加一个protected型指针变量:CSplashDlg* m_pSplashDlg; //声明一个对话框指针下面我们将在UI线程的InitInstance()函数中调用刚才创建的对话框并显示。
MFC界面设计new
MFC界面设计
内容
对话框应用程序 控件: 静态文本控件 编辑框控件 按钮控件 复选框和单项选择框 组合控控件
一.构建对话框应用程序
1. 启动vc6.0集成开发环境 ,单击“File〞 /“new〞命令
2. 选择Project选项卡,列表选择MFC AppWizard[exe]项,输入工程名
3. Step1窗口选择Dialog based单项选择项 4. Step 2、3、4默认设置,最后单击finish按
"All Files(*.*)|*.*| |",AfxGetMainWnd()); CString strPath,strText=""; char write[1000]; if(dlg.DoModal()==IDOK) {
strPath=dlg.GetPathName(); if(strPath.Right(4)!=".txt")
对话框实例二:查找替换对话框
〔二〕
CString str=""; str += "花间一壶酒,独酌无相亲。\n"; str += "举杯邀明月,对影成三人。\n"; str += "月既不解饮,影徒随我身。\n"; str += "暂伴月将影,行乐须及春。\n"; str += "我歌月徘徊,我舞影凌乱。\n"; str += "醒时同交欢,醉后各分散。\n"; str += "永结无情游,相期渺云汉。\n";
MFC程序的界面设计
实验一 MFC程序的界面设计一、实验目的和要求1、熟悉Visual C++编程环境。
2、掌握常用客户区鼠标消息的用法。
二、实验内容编程实现下图1.1所示界面,要求:在客户区点击鼠标左键、右键时弹出消息框显示当前鼠标坐标。
在客户区按下字符键时弹出消息框显示当前按下的字符。
利用应用程序向导建立基于单文档/视图结构的应用程序,查看框架程序中各类的结构。
图1.1 实验二程序运行界面三、实验步骤1. 新建工程新建一个工程,工程名称为Mouse,工程类型为MFC AppWizard(exe),应用程序类型为单文档/视图结构,最终会得到一个框架程序。
2. 定义鼠标消息处理函数选择“查看”菜单下的“建立类向导”菜单项,调出如图1.2所示的类向导界面。
图1.2 ClassWizard界面由于对客户区鼠标消息的处理封装在视图类中,所以在图1.2所示的界面中,Class name选择CMouseView,Object IDs选择CMouseView,Messages选择WM_LBUTTONDOWN,然后单击Add Function按钮,添加消息WM_LBUTTONDOWN的处理函数,最后单击Edit Code按钮,进入该函数的代码编辑区,,如图1.3所示。
图1.3 鼠标消息处理函数代码编辑界面在如图1.3所示的鼠标消息处理函数中添加下列代码,捕捉鼠标当前坐标。
void CMouseView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultMessageBox("you have pressed the left button",”Mouse”,MB_YESNOCANCEL|MB_ICONWARNING);CView::OnLButtonDown(nFlags, point);}在图1.2所示的界面中,用同样的方法添加消息WM_RBUTTONDOWN的处理函数,在该函数中添加下列代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC启动画面设计
玩过微软的Office的人都知道,每当打开Office软件,在它初始化的那段时间里,都会出现一个画面,这个画面就是启动画面。
所谓启动画面也就是Splash Screen,你也可以说它是“炫耀画面”。
它常常用以显示公司的标志和版权等信息。
目标
用一张位图来作为启动画面,在进入程序时显示。
策略
在应用程序类的I n i t I n s t a n c e ()函数中,在最早时刻创建启动窗口。
启动窗口用一个位图类显示在普通窗口中。
步骤
1.创建一个启动窗口类
1)用ClassWizard创建一个从一般CWnd类(当然也可以是CFrameWnd类)派
生的普通窗口类。
如图所示:
2)添加Create()成员函数到该类,在该函数中装入启动窗口中显示的位图,以及
在屏幕中央创建该窗口。
void CWzdSplash::Create(UINT nBitmapID)
{
m_bitmap.LoadBitmap(nBitmapID);
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
int x=(::GetSystemMetrics(SM_CXSCREEN)-bitmap.bmWidth)/2;
int y=(::GetSystemMetrics(SM_CYSCREEN)-bitmap.bmHeight)/2;
CRect rect(x,y,x+bitmap.bmWidth,y+bitmap.bmHeight);
CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDE R,rect,NULL,0);
}
3)用ClassWizard添加一个WM_PAINT消息处理函数到该窗口类中,在这里用
BitBlt()把位图绘制到屏幕上。
void CWzdSplash::OnPaint()
{
CPaintDC dc(this); // device context for painting
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
CDC dcComp;
dcComp.CreateCompatibleDC(&dc);
dcComp.SelectObject(&m_bitmap);
// draw bitmap
dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY);
}
2.把启动窗口类插入到InitInstance()函数中
1)在应用程序类的InitInstance()函数的开始处,创建该启动类的一个实例,调用它的Create(),并强制它进行绘制。
CWzdSplash wndSplash; //创建启动窗口类的实例
wndSplash.Create(IDB_BITMAP1);
wndSplash.UpdateWindow(); //send WM_PAINT
2)因为启动窗口类创建在堆栈中,一旦InitInstance()返回,该窗口将被自动销毁,因此,如果应用程序花费大量时间进行初始化,则不必采用在应用程序中加延时的方法,使启动窗口停留足够长的时间以确保读取显示的信息;如果应用程序花费很少时间进行初始化,或者担心高速机器把启动窗口变成影像,添加下面代码行到InitInstance( )的某个地方以对应用程序进行延时处理。
// add if splash screen too short
Sleep(2000);
至此,一个具有启动画面的小程序完成了,大家可以试试看它的运行效果。