用MFC怎么做窗体
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用MFC怎么做窗体相关的知识,希望对你有一定的参考价值。
没有学过MFC,不知道怎么用VC++6.0做MFC窗体,请教我如何一步一步进入MFC,然后就是怎么实现做窗体,以及在什么地方写代码!
是必须用MFC做窗体,然后在MFC里面写代码完善窗体的功能,主要是用MFC做一个画图板,不是用C++代码编窗体。
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
);//参数和消息结构提的前四个参数相同,事实上系统在调用窗口过程函数
//的时候自动将消息结构体的前四个参数传递到窗口过程。 参考技术A 你可以建立一个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);
本回答被提问者采纳 参考技术B 文件->新建->工程中选:MFC AppWizard[exe]->工程名称:test->确定->完成->Ctrl+F5->是
一个最最简单的MFC多文档窗体框架生成了!
MFC是集成的类库,是为了最大化的简化代码的录入而开发的。要学用MFC跑,最好先学用“window API”走。VC基础不牢,是学不明白的!基础概念:窗口、VC类的分类功能、消息、绘图等等。如果概念不清,连哪些是windows自带的类,哪些是MFC类都分不清,混着用的话,会越学越难的。
MFC中TabCtrl控件怎么随着窗体的大小变化而变化?
我在做一个项目,需要最大化显示,但是初始界面不可能就画很大,所以在想怎么让标签控件放大,哪位大神不吝赐教?
参考技术A 写在Onsize里 获取tab的rect,然后跟界面算一下比例 然后movewindow 参考技术B 这有个MFC tabctrl的例子,当窗口执行WM_SIZE时,改变tabctrl的大小即可,用MoveWindow.http://www.codeproject.com/Articles/93521/MultiPaneCtrl追问
标签控件我已经能最大化了,但是子窗口里的控件怎么随窗口大小改变呢 ,有例子吗?
追答我给你的那个例子就有啊,每个标签控件都有个子窗口的。你仔细看看。。。
本回答被提问者采纳以上是关于用MFC怎么做窗体的主要内容,如果未能解决你的问题,请参考以下文章