小弟初涉MFC宝地,哪里知道MFC非常的复杂,包含的东西暴多,另外每个基类的构造又封装太多的东西使的小弟看了混乱,再也没有从main->查看函数->数据结构等反复查找,至少还有头绪的c代码那种了,至少代码整个流程很好理解。由于MFC是事件驱动,以及消息传递模式的。里面有很多花头,比如消息映射等,MFC 巨集
等,由于最近老板让我看一个已经完成的产品代码,让我以来学习以下,二来找以下bug,可是小生刚刚学校毕业,涉世未生,程序由MFC以及c++混合的,我看了好几天还是没有把程序的整个框架给看懂,甚至那些消息都是被集合在一个BEGIN——MESSAGE——MAP和END_MESSAGE_MAP当中的,我不知道什么时候调用的。我也看了深入浅出MFC以及MFC相关书籍但是效率还是不是很高。不能一下子理解整个框架,问了几个对MFC的同事,他们也是跟我粗略的讲了以下“只要知道消息是怎么传送的就可以了”可是没看会整个框架如何谈到消息呢?因为是工作,不可能让你读完一本MFC书再让你看代码的,再说这也不针对目标。我的思路是首先理解vc6和mfc整个程序的大致框架->画出程序大致流程(消息传递)->再去看每个功能的实现细节->查找bug->写mfc代码->more..这里我就要请教那些以前也从不会mfc到现在的熟练,可以自己完整开发mfc程序的有经验的朋友了,像我这种情况应该怎么去熟悉mfc和老板叫给我的任务呢?以及你们以前在不懂mfc的时候是如何去理解程序大致框架的呢?请高手拉初学者一把。感谢!如有相关文章以及好的书籍请发到我的邮箱中,email:[email protected]
等,由于最近老板让我看一个已经完成的产品代码,让我以来学习以下,二来找以下bug,可是小生刚刚学校毕业,涉世未生,程序由MFC以及c++混合的,我看了好几天还是没有把程序的整个框架给看懂,甚至那些消息都是被集合在一个BEGIN——MESSAGE——MAP和END_MESSAGE_MAP当中的,我不知道什么时候调用的。我也看了深入浅出MFC以及MFC相关书籍但是效率还是不是很高。不能一下子理解整个框架,问了几个对MFC的同事,他们也是跟我粗略的讲了以下“只要知道消息是怎么传送的就可以了”可是没看会整个框架如何谈到消息呢?因为是工作,不可能让你读完一本MFC书再让你看代码的,再说这也不针对目标。我的思路是首先理解vc6和mfc整个程序的大致框架->画出程序大致流程(消息传递)->再去看每个功能的实现细节->查找bug->写mfc代码->more..这里我就要请教那些以前也从不会mfc到现在的熟练,可以自己完整开发mfc程序的有经验的朋友了,像我这种情况应该怎么去熟悉mfc和老板叫给我的任务呢?以及你们以前在不懂mfc的时候是如何去理解程序大致框架的呢?请高手拉初学者一把。感谢!如有相关文章以及好的书籍请发到我的邮箱中,email:[email protected]
解决方案 »
- vc编程如何把一个word的内容插入另外一个word的指定位置?
- 关于VC和WPF
- Rs232 与Rs485 通讯 编程上有什么不同吗?
- ODBC调用oracl,用到minus得不到结果,有没有办法解决?
- 请问如何去掉CListCtrl控件每项的选择标签
- 如何用CInternetSession保持session变量,然后用CInternetSession.openurl去浏览session保护的页面。
- sdk--为什么显示模糊的浮动菜单?
- 用 Application Center Test 测试时发生错误(0x80041013),怎么回事?
- 100分求visual assist注册码
- 交流:WTL如何?
- 在线请教,找错,关于CPropertySheet
- abc_rain来接分!感谢提供MSDN
中间定义消息处理的函数大概理解其中各条消息在什么时候会产生,以及对各条消息有什么处理就大概可以明白程序的结构了。具体一条消息是在什么时候会产生……这个不看书不看帮助没有办法。
例如MFC的WM_CREATE消息在窗口创建的时候产生,
而BE_CLICK消息则在一个可以click的物件被click的时候产生。
具体什么消息、什么时候产生、默认有什么处理,还是去查书好了。还要注意消息是否是程序自己创建的,如果是,就要看程序中具体创建的位置。
* generic.c: Source code for generic *
* *
* Comments: Generic Win32-based Application *
* *
* Functions: *
* WinMain - Application entry point *
* MainWndProc - main window procedure *
* AboutDlgProc - dialog procedure for About dialog *
* *
* *
\********************************************************************//********************* Header Files *********************/#include <windows.h>
#include "generic.h"/********************* Prototypes ***********************/LRESULT WINAPI MainWndProc( HWND, UINT, WPARAM, LPARAM );
LRESULT WINAPI AboutDlgProc( HWND, UINT, WPARAM, LPARAM );/******************* Global Variables ********************/HANDLE ghInstance;/********************************************************************\
* Function: int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int) *
* *
* Purpose: Initializes Application *
* *
* Comments: Register window class, create and display the main *
* window, and enter message loop. *
* *
* *
\********************************************************************/int PASCAL WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow )
{
WNDCLASS wc;
MSG msg;
HWND hWnd; if( !hPrevInstance )
{
wc.lpszClassName = "GenericAppClass";
wc.lpfnWndProc = MainWndProc;
wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
wc.lpszMenuName = "GenericAppMenu";
wc.cbClsExtra = 0;
wc.cbWndExtra = 0; RegisterClass( &wc );
} ghInstance = hInstance; hWnd = CreateWindow( "GenericAppClass",
"Generic Application",
WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
); ShowWindow( hWnd, nCmdShow ); while( GetMessage( &msg, NULL, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
} return msg.wParam;
}/********************************************************************\
* Function: LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM) *
* *
* Purpose: Processes Application Messages *
* *
* Comments: The following messages are processed *
* *
* WM_PAINT *
* WM_COMMAND *
* WM_DESTROY *
* *
* *
\********************************************************************/LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hDC; switch( msg ) {/**************************************************************\
* WM_PAINT: *
\**************************************************************/ case WM_PAINT:
hDC = BeginPaint( hWnd, &ps ); TextOut( hDC, 10, 10, "Hello, World!", 13 ); EndPaint( hWnd, &ps );
break;/**************************************************************\
* WM_COMMAND: *
\**************************************************************/ case WM_COMMAND:
switch( wParam ) {
case IDM_ABOUT:
DialogBox( ghInstance, "AboutDlg", hWnd, (DLGPROC)
AboutDlgProc );
break;
}
break;/**************************************************************\
* WM_DESTROY: PostQuitMessage() is called *
\**************************************************************/ case WM_DESTROY:
PostQuitMessage( 0 );
break;/**************************************************************\
* Let the default window proc handle all other messages *
\**************************************************************/ default:
return( DefWindowProc( hWnd, msg, wParam, lParam ));
} return 0;
}/********************************************************************\
* Function: LRESULT CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM)*
* *
* Purpose: Processes "About" Dialog Box Messages *
* *
* Comments: The About dialog box is displayed when the user clicks *
* About from the Help menu. *
* *
\********************************************************************/LRESULT CALLBACK AboutDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg ) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch( wParam ) {
case IDOK:
EndDialog( hDlg, TRUE );
return TRUE;
}
break;
} return FALSE;
}