![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
要用MFC创建一个窗口,如何创建?
我要用MFC创建一个窗口,我想知道如何窗机一个工程,选完MFCAppWizard[exe]之后选什么啊?谢谢,详细点,我是新手...
我要用MFC创建一个窗口,我想知道如何窗机一个工程,选完MFC AppWizard[exe]之后选什么啊?谢谢,详细点,我是新手
展开
5个回答
推荐于2017-09-08 · 知道合伙人数码行家
![](https://himg.bdimg.com/sys/portrait/item/public.1.79f05348.k2Z6eWZyiQKj2qkX-UAENQ.jpg)
知道合伙人数码行家
采纳数:25898
获赞数:1464958
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
![](https://wyw-base.cdn.bcebos.com/pc-content/follow.gif)
展开全部
创建一个完整窗口要经历的步骤:
1)设计一个窗口类;
2)注册窗口类;
3)创建窗口;
4)显示及更新窗口。
第一步:
windows 已经为用户定义了一个完整的窗口类,用户只需要将各个属性填满既可以。窗口类是一个 结构体,其定义如下:
typedef struct _WNDCLASS{
UINT style;//class style
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS;
第二步:
用RegisterClass(&wndclass)来定义的窗口注册。
第三步:创建窗口
1)定义一个句柄,然后用CreateWindow()来为句柄赋值。函数用法参看MSDN。创建窗口必须依据已经声明并且已经注册的窗口类型来创建。
HWND CreateWindow(
LPCTSTR lpClassName,//定义的窗口类名
LPCTSTR lpWindowName,//窗口的名字,将会在标题栏上显示出来的
DWORD dwStyle,//窗口的风格(窗口的外观模式和功能按钮等等)
int x,//窗口初始位置ws_usedefault
int y,//同上
int nWidth,//窗口的宽度,可以用ws_usedefault
int nHeight,//窗口高度,可以用ws_usedefault
HWND hWndParent,//父窗口的句柄,单一窗口则设置为空
HMENU hMenu,//菜单的句柄,如果没有菜单则将这个句柄设置为空
HINSTANCE hInstance,//由系统进行分配标识
LPVOID lpParam//一般设置为空
);
第四步:显示窗口
调用ShowWindow()函数来显示窗口。
ShowWindow(
HWND hWnd,//要显示的窗口的句柄
int nCmdShow//显示窗口的模式,如:最大化最小花显示
)
第五步:更新窗口
在显示窗口的函数调用完毕以后调用UpdateWindow()来对窗体进行更新
UpdateWindow(hwnd);//这个函数没有并不影响消息产生。
//消息循环
MSG msg;//定义了一个消息结构体变量
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/*
GetMessage(
LPMSG lpMsg,
//消息结构提的指针,无需对这个消息结构提的内部成员初始化,
//这个只需将定义的结构体的地址传到这里
HWND hWnd,
//窗口句柄,指明要获得的是那个窗口的消息,如果要获取所有窗口的消息则
//定义为NULL
UINT wMsgFilterMin,
//用来指定要从消息队列里边取得的最小值,
UINT wMsgFilterMax
//用来指定要从消息队列里边取得的最大值,
///////////////////////////////////////////////////////////////////////
//这两个参数用来限制GETMESSAGE 在消息队列里边的取值范围,//
//以去处调一些确定不感兴趣的消息 //
//if要从消息队列中所有的消息中提取的话则两个参数均设定为 //
//零 //
///////////////////////////////////////////////////////////////////////
);//从调用程序线程消息队列中取消息
*/
有了创建窗口的整个流程以后,现在就开始定义窗口过程,用WindowProc()
LRESULT CALLBACK WindowProc(/*函数名字可以更改,但是参数不允许改变*/
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);//参数和消息结构提的前四个参数相同,事实上系统在调用窗口过程函数
//的时候自动将消息结构体的前四个参数传递到窗口过程
1)设计一个窗口类;
2)注册窗口类;
3)创建窗口;
4)显示及更新窗口。
第一步:
windows 已经为用户定义了一个完整的窗口类,用户只需要将各个属性填满既可以。窗口类是一个 结构体,其定义如下:
typedef struct _WNDCLASS{
UINT style;//class style
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS;
第二步:
用RegisterClass(&wndclass)来定义的窗口注册。
第三步:创建窗口
1)定义一个句柄,然后用CreateWindow()来为句柄赋值。函数用法参看MSDN。创建窗口必须依据已经声明并且已经注册的窗口类型来创建。
HWND CreateWindow(
LPCTSTR lpClassName,//定义的窗口类名
LPCTSTR lpWindowName,//窗口的名字,将会在标题栏上显示出来的
DWORD dwStyle,//窗口的风格(窗口的外观模式和功能按钮等等)
int x,//窗口初始位置ws_usedefault
int y,//同上
int nWidth,//窗口的宽度,可以用ws_usedefault
int nHeight,//窗口高度,可以用ws_usedefault
HWND hWndParent,//父窗口的句柄,单一窗口则设置为空
HMENU hMenu,//菜单的句柄,如果没有菜单则将这个句柄设置为空
HINSTANCE hInstance,//由系统进行分配标识
LPVOID lpParam//一般设置为空
);
第四步:显示窗口
调用ShowWindow()函数来显示窗口。
ShowWindow(
HWND hWnd,//要显示的窗口的句柄
int nCmdShow//显示窗口的模式,如:最大化最小花显示
)
第五步:更新窗口
在显示窗口的函数调用完毕以后调用UpdateWindow()来对窗体进行更新
UpdateWindow(hwnd);//这个函数没有并不影响消息产生。
//消息循环
MSG msg;//定义了一个消息结构体变量
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/*
GetMessage(
LPMSG lpMsg,
//消息结构提的指针,无需对这个消息结构提的内部成员初始化,
//这个只需将定义的结构体的地址传到这里
HWND hWnd,
//窗口句柄,指明要获得的是那个窗口的消息,如果要获取所有窗口的消息则
//定义为NULL
UINT wMsgFilterMin,
//用来指定要从消息队列里边取得的最小值,
UINT wMsgFilterMax
//用来指定要从消息队列里边取得的最大值,
///////////////////////////////////////////////////////////////////////
//这两个参数用来限制GETMESSAGE 在消息队列里边的取值范围,//
//以去处调一些确定不感兴趣的消息 //
//if要从消息队列中所有的消息中提取的话则两个参数均设定为 //
//零 //
///////////////////////////////////////////////////////////////////////
);//从调用程序线程消息队列中取消息
*/
有了创建窗口的整个流程以后,现在就开始定义窗口过程,用WindowProc()
LRESULT CALLBACK WindowProc(/*函数名字可以更改,但是参数不允许改变*/
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);//参数和消息结构提的前四个参数相同,事实上系统在调用窗口过程函数
//的时候自动将消息结构体的前四个参数传递到窗口过程
![](https://ecmc.bdimg.com/public03/b4cb859ca634443212c22993b0c87088.png)
2024-08-21 广告
作为北京引力弹弓科技有限公司的工作人员,对于VS Code的常用插件有深入了解。以下是一些推荐的VS Code常用插件:1. **Auto Close Tag**:自动闭合HTML/电商平台ML标签,提高前端开发效率。2. **Pretti...
点击进入详情页
本回答由MarsCode提供
展开全部
VC6.0版。
选完MFC AppWizard[exe],然后给你的工程起一个名字。
其实最重要的就是第一个选择框:
1 Single document
2 Multiple documents
3 Dialog based
第一个就是一个单文档工程,就是你每次只能打开一个窗口,windows自带的记事本,就是一个例子。
第二个是多文档工程,额,类似VC就是一个多文档工程的吧?就是你可以打开多个文档。
第三个是基于对话框的工程,就是你打开就是一个对话框,不能打开文档的那种。比如windows自带的计算器,就是一个例子。
剩下的步骤,基本上都没啥问题,用默认的就行了。
告诉楼主一下,自己试一下感受一下就行的哈,一般情况下,弄不坏的。
选完MFC AppWizard[exe],然后给你的工程起一个名字。
其实最重要的就是第一个选择框:
1 Single document
2 Multiple documents
3 Dialog based
第一个就是一个单文档工程,就是你每次只能打开一个窗口,windows自带的记事本,就是一个例子。
第二个是多文档工程,额,类似VC就是一个多文档工程的吧?就是你可以打开多个文档。
第三个是基于对话框的工程,就是你打开就是一个对话框,不能打开文档的那种。比如windows自带的计算器,就是一个例子。
剩下的步骤,基本上都没啥问题,用默认的就行了。
告诉楼主一下,自己试一下感受一下就行的哈,一般情况下,弄不坏的。
本回答被提问者采纳
![](http://iknow-zhidao.bdimg.com/static/question-new/widget/value-comment/img/support_10.6efc748.gif?x-bce-process=image/format,f_auto/quality,q_80)
你对这个回答的评价是?
展开全部
你可以选择是单文档多文档还是基于对话框的应用程序,然后确定,用控件工具栏在你的对话框上添加你想要的控件就行,右击选择建立类向导建立相应的类………………。如果要学MFC建议你先把MFC消息映射机制搞明白。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
新建一个 MFC 应用程序,自动生成一个窗口。
MFC appWizard[exe]程序,创建一个单文档或者多文档的程序,都是有窗口的;还可以创建成基于对话框的。
想生成自己设计的窗口,得需要自己从一些类派生你自己的子类了。
MFC appWizard[exe]程序,创建一个单文档或者多文档的程序,都是有窗口的;还可以创建成基于对话框的。
想生成自己设计的窗口,得需要自己从一些类派生你自己的子类了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个很简单的,建议你告诉我具体要做什么。
有什么不懂得可以问我,我尽我所能帮你,账号就是QQ,我是计算机专业的。
有什么不懂得可以问我,我尽我所能帮你,账号就是QQ,我是计算机专业的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询