问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用MFC怎么做窗体

发布网友 发布时间:2022-05-21 14:09

我来回答

3个回答

热心网友 时间:2023-10-27 09:04

创建一个完整窗体要经历的步骤:
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
);//参数和消息结构提的前四个参数相同,事实上系统在调用窗口过程函数
//的时候自动将消息结构体的前四个参数传递到窗口过程。

热心网友 时间:2023-10-27 09:04

你可以建立一个MFC AppWizard(exe)工程,直接生成窗体,也可以建立一个Win32 Application工程,然后添加一个C++文件,输入以下内容,编译,运行即可

#include <windows.h>

LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT( "HelloWin ");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW |CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT( "This program requires Windows NT! "),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT( "The Hello Program "),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

热心网友 时间:2023-10-27 09:04

文件->新建->工程中选:MFC AppWizard[exe]->工程名称:test->确定->完成->Ctrl+F5->是
一个最最简单的MFC多文档窗体框架生成了!
MFC是集成的类库,是为了最大化的简化代码的录入而开发的。要学用MFC跑,最好先学用“window API”走。VC基础不牢,是学不明白的!基础概念:窗口、VC类的分类功能、消息、绘图等等。如果概念不清,连哪些是windows自带的类,哪些是MFC类都分不清,混着用的话,会越学越难的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑lol突然很卡怎么办啊电脑玩lolfps低怎么解决 危化品仓库有什么设备 香港中文大学2021-2022在河北,重庆最低录取分数线 ChaCheer 洽洽 南瓜子 盐焗味 500g-适用对象 老闫家小粒香南瓜子-适用对象 洽洽盐焗味南瓜子-适用对象 盐焗南瓜子里有添加明矾吗 老街口盐焗味南瓜子500g*2袋量大优惠休闲零食 一天走多少步可以减肥每天走多少步可以减肥 肉炖土豆需要炖多久时间 家里新换了个电脑 结果网速变得很慢不稳定 手机连上WIFI也超慢不稳定 求高手解答 电脑连路由器网速变慢手机手机没事怎么办 电脑网速莫名变慢,手机却没事? 我电脑昨天还是好好的今天早上开机网速就慢到离谱,QQ发信息过了1分钟才能显示,手机联网网络没问题? 正宗虫草哪里买 上海哪里买冬虫夏草正宗啊? 高分!在宿舍里面用什么锅比较好?电磁炉还是电火锅? 电炒锅好还是电磁炉好 吃火锅 ,请问买 电火锅 还是 电磁炉?电火锅好像有不粘涂层,那不很容易搞花吗? 一个人在外面租房,买个电火锅还是电磁炉好呢? 苹果手机怎么设置照相机 怎样用镜像文件.jio安装软件 三洋洗衣机如何解童锁DB6035BXS 三洋洗衣机S808儿童锁 重插电源后 所有键失灵 儿童锁锁显示锁住 拜托怎 ... 三洋全自动洗衣机l9088bhx怎么解童锁门 三洋洗衣机DG-F6031W童锁如何解开?急需,求帮助 三洋全自动洗衣机门锁怎么解 三洋洗衣机按童锁xQB60-B830s怎么解锁灯亮了下一部 三洋滚筒洗衣机DG-F7526BHC怎么解 童锁? 仓鼠长牙齿 老师让我们自己设计一个窗体,应该怎么做呢? access多重窗体怎么做? java怎么做窗体 怎么学好初中生物, 我都仔细背, 就是那些简答题 课本上的没有 ,怎么办哦 .帮助我提高的我在给你加100哦 请问VB编程里怎么做这种窗体? 高手来看看。 我现在用VS软件做一个弹出窗体,怎么实现?C#,javascript都可以。拜托拜托了! Delphi 怎样做一个登陆窗体 初中生物遗传遗传规律解题怎样画图 如何做第一个窗体呀,我用地是java1.4.1 01年初中生物地理会考题要点和练习题 生物的简答题 关于被子植物的 回答要详细 如果是老师回答的 请备注老师 非常感谢 河南省初中生物会考 这配置能玩dayz吗? 我这个配置能玩dayz独立版吗? steam上的正版的那个。 DayZ独立版怎么玩 DAYZ不能进入游戏,点开始就报错,求助大神? dayz独立版可以玩吗? 涂完安耐晒可以涂粉底吗 资生堂安耐晒粉底液用过吗 水和乳擦完,擦安耐晒,不再擦粉底可以吗?