windows應用程序框架及實例


應用程序框架:
同一類型應用程序的結構大致相同,並有很多相同的源代碼,
因此可以通過一個應用程序框架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文件
h C++頭文件 存儲類的定義代碼
cpp C++源文件 存儲類的成員函數的實現代碼
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 nCmdShow
13 )
14 {
15 HWND hw
16 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 = CreateWindow
45 (
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 WndProc
77 (    HWND hwnd,
78 UINT message,
79 WPARAM wParam,
80 LPARAM lParam
81 )
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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM