《Visual c++從初學到精通》讀書筆記(2)
第二部分----從程式碼例子的角度來分析mfc架構及windows程式設計
1、windows api程式設計
<span style="font-size:14px;"><strong>#include <windows.h> #include <stdio.h> LRESULT CALLBACK WinExample1Proc( //對視窗過程函式進行宣告 HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( //Win32應用程式的入口函式 HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASS wndcls; //建立一個視窗類 wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinExample1Proc; wndcls.lpszClassName="example1"; wndcls.lpszMenuName=NULL; wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls); //註冊視窗類 HWND hwnd; //建立視窗,並定義一個視窗控制代碼來唯一標識該視窗 hwnd=CreateWindow("example1","一個Windows應用程式的視窗",WS_OVERLAPPEDWINDOW, 0,0,500,500,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); //顯示和更新視窗 UpdateWindow(hwnd); MSG msg; //定義訊息結構體並進行訊息迴圈 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WinExample1Proc( //編寫視窗過程函式,實現訊息處理; HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { char exChar2[]={"第一個Windows應用程式"}; switch(uMsg) { case WM_CHAR: char exChar1[40]; sprintf(exChar1,"鍵盤輸入字元的ASCII值為: %d",wParam); MessageBox(hwnd,exChar1,"char",0); break; case WM_RBUTTONDOWN: MessageBox(hwnd,"右鍵被按下","message",0); break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"要結束嗎?","提示:",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); RECT rt; GetClientRect(hwnd,&rt); DrawText(hDC,exChar2,strlen(exChar2),&rt,DT_CENTER); EndPaint(hwnd,&ps); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; } </strong></span>
可以參考該書章節,可以發現各個API函式的含義,以及形參與實現的含義,最後實現的效果如下圖:
沒什麼多說的,根據API寫函式就可以。
其中值得注意的是它的實現機理,特別是訊息處理機制:
2、MFC程式設計
孫鑫:
前面是將具體1個MFC程式先是怎麼從哪個地方開始執行的,在進入main之前先處理了什麼,下面講進入winmain之後,winmian是怎樣執行的
可以看到與winmain形參一樣
孫鑫:接下來應該是:
這樣winmain函式就完了,接下來是設計視窗類和註冊視窗類了:
孫鑫:
那麼至此,一個空白的MFC的函式執行過程分析就是這樣的。其中裡面有很多類的相互呼叫等。
上述整個流程中,還沒有講解:
1、MFC文件結構檢視的各個類之間的關係、
2、訊息對映機制是怎樣
3、我們自己在這個框架中應該怎樣加自己的程式碼。下面第3部分講解上述3個問題
3、新增一個button
熟悉了上面的winmain中的分析,再新增這麼一個button不難。裡面的軟體截圖是因為自己之前沒有用過vs2010的這些功能。
4、訊息機制:
通過軟體增加新類,會在幾個位置(視訊中3個位置)增加新的程式碼,可以增加訊息相應函式
整個流程其實比較簡單吧,就是一個對照關係,跟前面寫的api的程式一樣,路由到作業系統後再是怎麼處理的就不知道了
總結:
本意是想學習vs2010開發環境,由於主要是針對mfc設計的,加之之前瞭解過,並學習了c++想了解下,並且有些如dll的概念等等。通過這2天的學習,算是入了門吧,對vc程式設計打了個基礎。但是具體的各個部分就不是很清楚了,沒有深入。
另外後面可以學學linux程式設計,vc程式設計一到os就不能深入剖了。vc目前主要還是學習mfc框架。但是linux開源,可以自己選擇各種開源的框架,並能剖os原始碼。
自己應用程式程式設計,沒怎麼真正實踐過,這幾天的mfc學習算是對其的一個理解吧。
3-15
lijiuyang於hust