有C++基础 如何快速学好MFC?
C++我学的还可以但是输入输出都是在控制台里完成老师需要我们做一个WINXP下类似窗口的可视化软件(像VB编出来的一样)所以我要学习MFC时间紧迫我改如何快速掌握MF才?...
C++我学的还可以 但是输入 输出都是在控制台里完成 老师需要我们做一个WIN XP下类似窗口的可视化软件(像VB编出来的一样) 所以我要学习MFC 时间紧迫 我改如何快速掌握MF才? MFC的实质是什么啊?拜托最好不要用术语 用浅显点的话说
展开
展开全部
耐心的把我写的看完,花10分钟,你就知道MFC的实质了。
============================================================
先从基本的windows SDK程序看起,windows程序用的是消息机制,他是这样工作的:
1个标准的windows程序包括WinMain和WndProc两个函数:
#include <windows.h>
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("");
HWND hwnd;
MSG msg;
WNDCLASSEX wndclassex = {0};
wndclassex.cbSize = sizeof(WNDCLASSEX);
wndclassex.style = CS_HREDRAW | CS_VREDRAW;
wndclassex.lpfnWndProc = WndProc;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclassex.lpszMenuName = NULL;
wndclassex.lpszClassName = szAppName;
wndclassex.hIconSm = wndclassex.hIcon;
if (!RegisterClassEx (&wndclassex))
{
MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,
szAppName,
TEXT ("WindowTitle"),
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)
{
HDC hdc;
PAINTSTRUCT ps;
switch (message)
{
case WM_CREATE:
return (0);
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
TextOut (hdc, 0, 0, "A Window!", 27);
EndPaint (hwnd, &ps);
return (0);
case WM_DESTROY:
PostQuitMessage (0);
return (0);
}
return DefWindowProc (hwnd, message, wParam, lParam);
}
WinMain中创建窗口的步骤为:
1.填写wndclassex结构,这个结构包括了你要创建的窗口的描述。并且包括了一个回调函数的地址(WndProc函数)。
2.用Windows的API: RegisterClassEx()注册wndclassex结构描述的窗口,这样windows就知道了有这样一个窗口,并且在系统中生成了窗口类,但这个窗口还没开始工作。
3.用Windows的API: CreateWindowEx()创建窗口,在系统中生成窗口实例,你可以看到CreateWindowEx的参数之一就是窗口类名,这就告诉了系统创建窗口的依据,是根据前面注册的窗口类的信息创建的。
4.窗口创建后还没有显示,用ShowWindow()则将其显示出来并开始消息循环。
5.UpdateWindow()是立刻给窗口发送一个WM_PAINT消息,让窗口上的内容立刻刷新。这在后面再说。
6.开始一个消息循环。这个while循环不停地把用户的操作比如鼠标单击、按键等各种消息发送给windows。
7.用户的消息发送给windows干什么呢,还记得第一步填写结构时的WndProc吗,WndProc是一个回调函数,就是说由Windows调用的,注册窗口类时告诉Windows了WndProc的地址,于是Wndows将收到的消息发送给WndProc,WndProc的第二个参数:UINT message说明了消息的类型,于是下面的switch..case就根据这个值来判断消息的类型并做出相应的处理。
比如上面的例子收到了一个WM_PAINT消息,这个是在窗口需要绘制时发出的消息,switch...case判断出这个消息后就在窗口上输出了一行文字。
============================================================
Windows所有需要接收消息的窗口都有上面所说的过程,即消息循环。实际上我们经常看到的一个窗口中并不仅仅只有一个消息循环,每个按钮、文本框控件其实都是窗口,都有自己的消息循环。
MFC就是把窗口的消息循环用C++和宏封装了起来,做成一个基类,你用这个基类创建一个对象后经过初始化,即成了一个拥有消息循环的窗口了,不需要你手动撰写回调函数,你只需要重载类提供的消息处理函数就可以对消息进行响应。
然后根据不同类型的窗口和控件,从基类派生出各种子类,这些子类具有他们自己的特性和消息,比如按钮的叫CButton,通过这些子类就能创建相应的控件对象。
=====================================================
可以看的书有
《Windows程序设计》第5版
《MFC Windows 程序设计》第2版
《深入浅出MFC》第2版
其它书就没什么看头了。
其实看再多书也难上手,最好的办法是自己先试着做点东西。做几样东西就能入门了。其实如果要求不高的话不用太了解MFC也能写出像样的东西,但是了解MFC有助于写出NB的程序。
============================================================
先从基本的windows SDK程序看起,windows程序用的是消息机制,他是这样工作的:
1个标准的windows程序包括WinMain和WndProc两个函数:
#include <windows.h>
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("");
HWND hwnd;
MSG msg;
WNDCLASSEX wndclassex = {0};
wndclassex.cbSize = sizeof(WNDCLASSEX);
wndclassex.style = CS_HREDRAW | CS_VREDRAW;
wndclassex.lpfnWndProc = WndProc;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclassex.lpszMenuName = NULL;
wndclassex.lpszClassName = szAppName;
wndclassex.hIconSm = wndclassex.hIcon;
if (!RegisterClassEx (&wndclassex))
{
MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,
szAppName,
TEXT ("WindowTitle"),
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)
{
HDC hdc;
PAINTSTRUCT ps;
switch (message)
{
case WM_CREATE:
return (0);
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
TextOut (hdc, 0, 0, "A Window!", 27);
EndPaint (hwnd, &ps);
return (0);
case WM_DESTROY:
PostQuitMessage (0);
return (0);
}
return DefWindowProc (hwnd, message, wParam, lParam);
}
WinMain中创建窗口的步骤为:
1.填写wndclassex结构,这个结构包括了你要创建的窗口的描述。并且包括了一个回调函数的地址(WndProc函数)。
2.用Windows的API: RegisterClassEx()注册wndclassex结构描述的窗口,这样windows就知道了有这样一个窗口,并且在系统中生成了窗口类,但这个窗口还没开始工作。
3.用Windows的API: CreateWindowEx()创建窗口,在系统中生成窗口实例,你可以看到CreateWindowEx的参数之一就是窗口类名,这就告诉了系统创建窗口的依据,是根据前面注册的窗口类的信息创建的。
4.窗口创建后还没有显示,用ShowWindow()则将其显示出来并开始消息循环。
5.UpdateWindow()是立刻给窗口发送一个WM_PAINT消息,让窗口上的内容立刻刷新。这在后面再说。
6.开始一个消息循环。这个while循环不停地把用户的操作比如鼠标单击、按键等各种消息发送给windows。
7.用户的消息发送给windows干什么呢,还记得第一步填写结构时的WndProc吗,WndProc是一个回调函数,就是说由Windows调用的,注册窗口类时告诉Windows了WndProc的地址,于是Wndows将收到的消息发送给WndProc,WndProc的第二个参数:UINT message说明了消息的类型,于是下面的switch..case就根据这个值来判断消息的类型并做出相应的处理。
比如上面的例子收到了一个WM_PAINT消息,这个是在窗口需要绘制时发出的消息,switch...case判断出这个消息后就在窗口上输出了一行文字。
============================================================
Windows所有需要接收消息的窗口都有上面所说的过程,即消息循环。实际上我们经常看到的一个窗口中并不仅仅只有一个消息循环,每个按钮、文本框控件其实都是窗口,都有自己的消息循环。
MFC就是把窗口的消息循环用C++和宏封装了起来,做成一个基类,你用这个基类创建一个对象后经过初始化,即成了一个拥有消息循环的窗口了,不需要你手动撰写回调函数,你只需要重载类提供的消息处理函数就可以对消息进行响应。
然后根据不同类型的窗口和控件,从基类派生出各种子类,这些子类具有他们自己的特性和消息,比如按钮的叫CButton,通过这些子类就能创建相应的控件对象。
=====================================================
可以看的书有
《Windows程序设计》第5版
《MFC Windows 程序设计》第2版
《深入浅出MFC》第2版
其它书就没什么看头了。
其实看再多书也难上手,最好的办法是自己先试着做点东西。做几样东西就能入门了。其实如果要求不高的话不用太了解MFC也能写出像样的东西,但是了解MFC有助于写出NB的程序。
展开全部
我和你一样,目前也在学mfc 在没有sdk的基础下直接学的mfc
建议方法 自己买一本书 或mfc windows程序设计2版 或深入浅出MFC
然后再在网上下孙鑫老师的视频 这样效果比较好
另外个人觉得大学期间楼主最好把精力花在语言上,精通一下数据结构和算法
很少有找工作的时候考到ide的
而且在工作后接触ide多,学习起来事半功倍
不过大学期间能学好当然更好
建议方法 自己买一本书 或mfc windows程序设计2版 或深入浅出MFC
然后再在网上下孙鑫老师的视频 这样效果比较好
另外个人觉得大学期间楼主最好把精力花在语言上,精通一下数据结构和算法
很少有找工作的时候考到ide的
而且在工作后接触ide多,学习起来事半功倍
不过大学期间能学好当然更好
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
怎么才算快速,一天肯定不行,你买本mfc windows程序设计2版(一千多页),你一天看一百页的话,10天就能看完,前提是除了吃喝拉撒的时间,你就看书。
不能比这更快了,否则会消化不良。
不能比这更快了,否则会消化不良。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
微软基础类库,microsoft foundation class.
为了减少代码编写,微软把一些常用的类封装在一个库里,供大家公用,调用。即MFC。MFC编程就是调用这个基本库.它是微软的VC++带的视窗用的基本库。
你可以看<<深入浅出MFC>>这本书,不过我对MFC还不是很了解,权当是来给你做参考的,不过这本书被大家认为是很不错的书的
为了减少代码编写,微软把一些常用的类封装在一个库里,供大家公用,调用。即MFC。MFC编程就是调用这个基本库.它是微软的VC++带的视窗用的基本库。
你可以看<<深入浅出MFC>>这本书,不过我对MFC还不是很了解,权当是来给你做参考的,不过这本书被大家认为是很不错的书的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你先去学习下SDK 只要了解WINDOWS程序的消息机制就行了 SDK的书就看《windows程序设计》没时间的话 看前面几章就行了 然后就拿本MFC的书看吧 《深入浅出MFC》还不错
这些都有电子书 百度搜索下就可以找到
这些都有电子书 百度搜索下就可以找到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询