標籤:log style 結束 over instance dos case windows gets
應用程式架構:
同一類型應用程式的結構大致相同,並有很多相同的原始碼,
因此可以通過一個應用程式架構AFX(Application FrameWorks)
編寫同一類型應用程式的通用原始碼。
主要嚮導:
Datebase Project:建立資料庫專案
MFC ActiveX Control Wizard:建立基於MFC的ActiveX控制項
MFC AppWizard[dll]:建立基於MFC的動態連結程式庫
MFC AppWizard[exe]:建立基於MFC的應用程式(最常用)
New Database Wizard:在SQL伺服器上建立一個SQL Server資料庫
Win32 Application:建立Win32應用程式,可不使用MFC,採用SDK方法編程
Win32 Console Application:建立DOS下的Win32控制台應用程式,
採用C++或C語言進行編程
Win32 Dynamic-link Library:建立Win32動態連結程式庫,採用SDK方法
Win32 Static Library:建立Win32靜態連結庫,採用SDK方法
引入應用程式嚮導的目的:為了避免程式員重複編寫代碼。
區別於DOS程式,即使一個簡單的Windows程式:
它也必須顯示一個程式運行視窗,需要編寫複雜的程式碼。
而同一類型應用程式的架構視窗風格是相同的,如相同的功能表列、工具列、
狀態列和使用者區。
基本功能表命令的功能也是一樣的,如相同的檔案操作和編輯命令。
編寫一個實現具體功能的MFC應用程式的步驟:
★根據應用程式特性在MFC AppWizard[exe]應用程式嚮導各步驟對話方塊中進行選擇,
建立一個應用程式的架構。
★利用資源編輯器為程式編輯或添加資源,如編輯菜單、添加對話方塊等。
★利用ClassWizard類嚮導或手工添加類、成員變數和成員函數的聲明。
★根據需要編寫具體的函數代碼。
★編譯、連結程式。如果程式有語法錯誤,需要修改來源程式。直到沒有編譯、連結錯誤,
才能得到可執行程式。
★測試應用程式各項功能,如果程式沒有實現程式設計所要求的功能,啟動Debug調試器
進行調試,找出並修改程式設計中的邏輯錯誤。
我們可以為Visual C++ MFC編程作一個形象的總結:
◇MFC應用程式架構使我們的程式設計工作猶如做填充題。
◇Developer Studio中的整合工具使我們的程式設計工作猶如做選擇題,
程式員猶如軟體整合裝配車間裡的技術工人。
Visual C++中通用的檔案類型
尾碼類型說明
dsw工作區檔案將項目的詳細情況組合到工作區中
dsp專案檔儲存項目的詳細情況並替代mak檔案
hC++標頭檔儲存類的定義代碼
cppC++源檔案儲存體類的成員函數的實現代碼
rc資源指令檔儲存菜單、工具列和對話方塊等資源
rc2資源檔用來將資源套件含到項目中
ico表徵圖檔案儲存體應用程式圖示
bmp位元影像檔案儲存體位元影像
clw類嚮導檔案儲存體ClassWizard類嚮導使用的類資訊
MFC中資源標識符首碼
標識符首碼說明
IDR_主菜單、工具列、應用程式圖
標和快速鍵表
IDD_對話方塊
IDC_控制項和游標
IDS_字串
IDP_提示資訊對話方塊的字串
ID_功能表命令項
應用程式舉例:
例1:建立應用程式架構。
本例的目的在於說明建立Windows應用程式的方法及過程
1 //包含應用程式所需的資料類型和資料結構的定義 2 #include <windows.h> 3 4 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//視窗函數說明 5 6 //----------------------以下初始化視窗類別------------------------- 7 int WINAPI WinMain 8 ( 9 HINSTANCE hInstance,10 HINSTANCE hPrevInst,11 LPSTR lpszCmdLine,12 int nCmdShow13 )14 {15 HWND hw16 nd;17 MSG Msg;18 WNDCLASS wndclass;19 char lpszClassName[] = "視窗"; //視窗類別名20 char lpszTitle[] = "My_windows"; //視窗標題名21 22 //------------------視窗類別的定義---------------------------23 wndclass.style=0; //視窗類別型為預設類型24 wndclass.lpfnWndProc=WndProc; //定義視窗處理函數25 wndclass.cbClsExtra=0; //視窗類別無擴充26 wndclass.cbWndExtra=0; //視窗執行個體無擴充27 wndclass.hInstance=hInstance; //當前執行個體控制代碼28 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);29 //視窗的最小化表徵圖為預設表徵圖30 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;31 //視窗採用箭頭游標32 wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);33 //視窗背景為白色34 wndclass.lpszMenuName=NULL; //視窗中無菜單35 wndclass.lpszClassName=lpszClassName ; //視窗類別名為"視窗"36 37 //------------------以下進行視窗類別的註冊------------38 if(!RegisterClass(&wndclass))//如果註冊失敗則發出警告39 {40 MessgaeBeep(0);41 return FALSE;42 }43 //--------------------建立視窗-------------------------44 hwnd = CreateWindow45 (46 lpszClassName, //視窗類別名47 lpszTitle, //視窗執行個體的標題名48 WS_OVERLAPPEDWINDOW, //視窗的風格49 CW_USEDEFAULT,50 CW_USEDEFAULT, //視窗左上方座標為預設值51 CW_USEDEFAULT,52 CW_USEDEFAULT, //視窗的高和寬為預設值53 NULL, //此視窗無父視窗54 NULL, //此視窗無主菜單55 hInstance, //建立此視窗的應用程式的當前控制代碼56 NULL //不使用該值57 58 );59 //------------------------顯示視窗-----------------------60 ShowWindow(hwnd,nCmdShow);61 62 //------------------------繪製使用者區---------------------63 UpdateWindow(hwnd); 64 //------------------------訊息迴圈-----------------------65 while(GetMessage(&Msg,NULL,0,0))66 {67 TranslateMessage(&Msg);68 DispatchMessage(&Msg);69 }70 71 //訊息迴圈結束即程式終止時將訊息返回作業系統72 return Msg.wParam;73 }74 75 //---------------------------------視窗函數--------------------76 LRESULT CALLBACK WndProc77 ( HWND hwnd,78 UINT message,79 WPARAM wParam,80 LPARAM lParam81 )82 83 { 84 switch(message)85 { 86 case WM_DESTROY:87 PostQuitMessage(0);//調用PostQuitMessage發出VM_QUIT訊息88 default: //預設時採用系統訊息預設處理函數89 return DefWindowProc(hwnd,message,wParam,lParam);90 }91 return(0);92 }
windows應用程式架構及執行個體