关于Windows编程和MFC的入门级知识

对于一个刚刚学习可视化编程的同学来讲,想要理解一个Windows应用程序的运行机制还是很困难的。但是如果,不能很好的理解Windows编程,那么学习MFC就更是难上加难。基于这个原因,我现在想谈谈一个如何去理解一个Windows应用程序,以及编写简单的MFC程序。

下面我来具体分析一个使用Windows API编写的程序。

#include<windows.h> #include<stdio.h> LRESULT CALLBACK WinMeProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASS firstwindow; firstwindow.cbClsExtra = 0; firstwindow.cbWndExtra = 0; firstwindow.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); firstwindow.hCursor = LoadCursor(NULL,IDC_ARROW); firstwindow.hIcon = LoadIcon(NULL,IDI_APPLICATION); firstwindow.hInstance = hInstance; firstwindow.lpfnWndProc = WinMeProc; //static LPCTSTR szAppName = L"zhi"; firstwindow.lpszClassName = "zhi"; firstwindow.lpszMenuName = NULL; firstwindow.style =CS_HREDRAW | CS_VREDRAW; RegisterClass(&firstwindow); HWND hwnd; hwnd = CreateWindow("zhi","zzbarry",WS_OVERLAPPEDWINDOW ,30,30,1000,1000,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WinMeProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg){ case WM_CHAR: char szChar[20]; sprintf(szChar,"char is %d",wParam); MessageBox(hwnd,szChar,"zhi",0); break; case WM_LBUTTONDOWN: MessageBox(hwnd,"zhi","zhi",0); HDC hdc; hdc = GetDC(hwnd); TextOut(hdc,0,30,"zhi",strlen("zhi")); ReleaseDC(hwnd,hdc); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC = BeginPaint(hwnd,&ps); TextOut(hDC,0,30,"zhiming",strlen("zhiming")); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES == MessageBox(hwnd,"退出?","zhi",MB_YESNO)){ DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; }  

     对于一个Windows程序,它的开始函数是WinMain,这个函数的意义相当于DOS下的Main函数。这个函数的调用,发动了整Windows程序。WinMain的四个参数,在这里不详细解释,可以查看MSDN。WinMain中做了一下几个事情:

第一,定义了WNDCLASS类,这个类定了窗口的属性。具体的属性大家还是要查看MSDN。作为一个程序员如果不能很好的查阅资料那是相当悲剧的。 紧接着,调用RegisterClass来注册窗口,紧接着调用CreateWindow,来创造窗口。再紧接着调用UpdateWindow来更新窗口。注意这个期间定义了一个句柄,因为下面的函数必须给以传递句柄参数。剩下的就是消息循环。Windows程序的启动和更改都是靠的消息循环。这个可以查看MSDN中的MSG结构体来查看。

 

今天不早了,先讲WIndows程序,明天继续讲解如何编写一个简单的MFC程序。自己写的不好,第一次发技术贴,请大家多多关照。

你可能感兴趣的:(编程,windows,null,mfc,callback,winapi)