Windows 程式設計簡介從C/C++到Windows程式設計
Windows 程式設計簡介
一、從C/C++到Windows程式設計
前面我們學習的C/C++程式都是DOS程式(或稱為Windows控制檯程式),也就是現在大學裡的開設的《C/C++程式設計》的內容,這些程式由於不涉及到Windows 程式設計的細節,因此比較容易入門學習,這對訓練初學者的程式設計思想是很有用的,也是有益的。但是當我們基本掌握了C/C++程式設計後,就不能僅僅停留在DOS下(或Windows控制檯下)編寫、執行程式。我們應該從程式設計思想的訓練到Windows實用程式設計的轉變。
一個最簡單的Windows C程式。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL,"Hello 歡迎使用Turbo C for Windows 整合實驗與學習環境!","我的第一個Windows程式",MB_OK);
return 0;
}
程式的執行結果是:
程式解析:
1、windows.h是每一個Windows程式都需要的標頭檔案。
2、WinMain函式是所有Windows C程式的入口,類似於DOS C中的main函式。
3、MessageBox是一個Win32 API函式(API,Application Programming Interface 應用程式介面),其作用是彈出一個對話方塊,顯示訊息的內容。該函式的第一個引數是用來指定父視窗控制程式碼,即對話方塊所在的視窗控制程式碼。第二個引數是用來顯示訊息的內容(你可以修改成你想顯示的內容)。第三個引數是 對話方塊標的標題,如本例的“我的第一個Windows程式”,第四個引數是指定對話方塊中顯示的按鈕,試一試,將MB_OK修改成MB_OKCANCEL,執行一下程式會出現什麼結果,再試一試修改成MB_RETRYCANCEL
試一試將個求1+2+3+…+100的和的DOS C程式修改成Windows 程式。
main()
{
int sum=0,i;
for(i=1;i {
sum=sum+i;
}
printf("1-100自然書數的和是:%dn",sum);
}
參考程式:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
int sum=0,i;
char str1[40]="1-100自然書數的和是:",str2[10];
for(i=1;i {
sum=sum+i;
}
itoa(sum,str2,10); /將整型變數sum的運算結果轉化字串str2,以方便顯示/
strcat(str1,str2); /將str1的值(1-100自然書數的和是:)與str2連線,以方便顯示/
MessageBox(NULL,str1,"第二個Win32程式",MB_OK);
return 0;
}
執行結果:
二、Windows 程式簡介
(1)Windows C程式的組成:
1.C程式原始檔,副檔名為.c或.cpp
2.標頭檔案,副檔名為.h
3.資原始檔,副檔名為.rc
(2)源程式的組成結構
Windows C程式有相對固定的基本結構,一般有入口函式WinMain和視窗函式。
1、WinMain函式
是所有Windows C程式的入口,類似於DOS C的main函式,其功能是完成一系列的定義和初始化工作,併產生訊息迴圈。訊息迴圈是整個程式執行的核心。
WinMain函式有三個基本的組成部分:函式說明、初始化和訊息迴圈
a、WinMain函式的說明:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
引數說明:
hInstance 應用程式當前例項控制程式碼
hPrevInstance 前一個例項控制程式碼,在32位系統中該引數永遠是NULL
szCmdLine 程式執行時的命令列引數
iCmdShow 程式執行時的顯示方式,如最大化、最小化、隱藏顯示等。
b、初始化
初始化包括視窗類的定義、註冊、建立視窗例項和顯示視窗四部分。
這是固定格式,所有的Windows程式基本一樣,記住即可,具體參見下面的程式例項的註釋。
2、視窗函式
視窗函式定義了Windows C程式對接受到的不同訊息的響應,其中包含了應用程式對各種可能接收到的訊息的處理過程,是訊息處理分支控制語句的集合。通常視窗函式是有一個或多個switch語句組成。每一條case語句對應一種訊息,當應用程式接收到一個訊息時,就會執行相應case 語句下的程式模組來完成相應的功能。
視窗函式說明:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
引數說明:
hwnd 視窗控制程式碼
message 代表所處理訊息的訊息值
wParam 訊息的附加引數,是message的進一步資訊
lParam 訊息的附加引數,是message的進一步資訊
一般用法:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
switch (message)
{
case 常數1:
...
case 常數2:
...
...
case WM_DESTROY:
PostQuitMessage (0) ; //在訊息佇列中插入一條“退出”訊息
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//執行預設的訊息處理
}
視窗函式的主體是訊息處理語句,該語句是有一系列case語句組成。我們學習者自需要根據視窗可能收到的訊息在case語句中編寫相應的處理程式即可。
三、一個簡單的Windows C程式:Hello World程式
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //視窗函式宣告
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) //WinMain函式說明
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ; //視窗控制程式碼
MSG msg ; //訊息結構
WNDCLASS wndclass ; //視窗類結構
//下面是視窗類的定義
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//載入圖示供程式使用
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //載入滑鼠指標供程式使用
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//獲取一個圖形物件,在這個例子中,是獲取繪製視窗背景的刷子
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
//下面是視窗類的註冊
if (!RegisterClass (&wndclass))//為程式視窗註冊視窗類
{
return 0 ;
}
//根據視窗類建立視窗
hwnd = CreateWindow (szAppName, TEXT ("一個簡單的Win32程式"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
) ;
//顯示視窗
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ; //指示視窗重新整理自身
//訊息迴圈
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ; //轉換某些鍵盤訊息
DispatchMessage (&msg) ; //將訊息傳送給視窗過程
}
return msg.wParam ;
}
//視窗函式
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ; //開始視窗繪製
GetClientRect (hwnd, &rect) ; //獲取視窗客戶區的尺寸
DrawText (hdc, TEXT ("Hello World!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; //顯示Hello World,可以修改程式你要顯示的內容
EndPaint (hwnd, &ps) ; //結束視窗繪製
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ; //在訊息佇列中插入一條“退出”訊息
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//執行預設的訊息處理
}
提示:該程式的原始碼在《簡單的入門程式例項》中
四、總結
所有Windows 程式的基本結構都與上面的例項相同或相近(說明:有的程式是將視窗類和窗機視窗封住成函式後呼叫,其實質是一樣的),記住一個例子,編寫其他程式時,在其上面修改即可。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2807920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++ concurrency::task實現非同步程式設計(WindowsC++非同步程式設計Windows
- c++簡單程式設計-3C++程式設計
- windows核心程式設計--程式Windows程式設計
- windows核心程式設計--windows程式的執行Windows程式設計
- 從程式設計到養生程式設計程式設計
- Windows核心程式設計_HookWindows程式設計Hook
- C++核心程式設計C++程式設計
- Windows程式設計系列:圖形程式設計基礎Windows程式設計
- 初步瞭解C語言Windows程式設計C語言Windows程式設計
- 7-Windows程式設計 -滑鼠Windows程式設計
- 2-Windows程式設計 -UnicodeWindows程式設計Unicode
- Windows核心程式設計_磁碟加密Windows程式設計加密
- Windows sdk程式設計筆記Windows程式設計筆記
- windows核心程式設計--纖程Windows程式設計
- windows核心程式設計--DLL基本Windows程式設計
- windows核心程式設計--精華Windows程式設計
- C++提高程式設計C++程式設計
- C++ 提高程式設計C++程式設計
- C++程式設計實現C++程式設計
- Windows 程式設計精髓:從 API、UI、結構到商業產品Windows程式設計APIUI
- <<從0到1學C++>> 第2篇 認識C++程式導向程式設計的特點C++程式設計
- 最簡單的C程式設計--順序程式設計C程式程式設計
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- shell程式設計—簡介(一)程式設計
- 6-Windows程式設計 -鍵盤Windows程式設計
- windows核心程式設計--字符集Windows程式設計
- windows核心程式設計--核心物件Windows程式設計物件
- windows核心程式設計--DLL高階Windows程式設計
- 《Windows核心程式設計》筆記(一)Windows程式設計筆記
- C++提高程式設計-模板C++程式設計
- C++提高程式設計-STLC++程式設計
- C++核心程式設計筆記C++程式設計筆記
- QML之C++混合程式設計C++程式設計
- 物件導向程式設計C++物件程式設計C++
- C++高階程式設計pdfC++程式設計
- C++ & Intel MKL 混合程式設計C++Intel程式設計
- C++入門程式設計----C++運算子(8)C++程式設計
- 01 Python3程式設計之程式設計語法簡介Python程式設計