1. 程式人生 > >Windows-API程式例子--//一定要學會看MSDN

Windows-API程式例子--//一定要學會看MSDN

//一定要學會看MSDN

#include "StdAfx.h"

#include <windows.h>
LRESULT  CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//視窗函式宣告,這一函式將處理髮往應用程式視窗的各種訊息
char szClassName[]="Windowclass1";//視窗結構體的名稱
char szAppTitle[]="chen";//視窗標題
INT PASCAL WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,INT nCmdShow )
{
HWND hMainWnd;//視窗控制代碼
MSG msg;//訊息結構體
WNDCLASS myWC;//視窗結構體

if (!hPrevInstance)//表示前一應用程式例項控制代碼,這一語句的作用是判斷是否已有應用程式的例項在執行
{
//應用程式在經歷視窗前,應先規定所要建立的視窗的特徵,下面一系列的語句通過給視窗的結構體的資料成員賦值來規定所要建立的視窗的特徵。
myWC.style=CS_HREDRAW|CS_VREDRAW;//視窗風格
myWC.lpfnWndProc=WndProc;//本視窗的訊息處理函式(視窗函式)
myWC.cbClsExtra=0;//附加引數
myWC.cbWndExtra=0;//附加引數
myWC.hInstance=hInstance;//當前應用程式的例項控制代碼
myWC.hIcon=LoadIcon(NULL,IDI_APPLICATION);//視窗圖示
myWC.hCursor=LoadCursor(NULL,IDC_ARROW);//視窗游標
myWC.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//視窗背景色
myWC.lpszMenuName=NULL;//視窗選單
myWC.lpszClassName=szClassName;//給視窗結構體命名,CreateWindow()函式將根據視窗結構體名稱來建立視窗
RegisterClass(&myWC);//註冊視窗
}
//下面用CreateWindow()函式來建立視窗,並返回所建立視窗的控制代碼
hMainWnd=CreateWindow(szClassName,szAppTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);//
ShowWindow(hMainWnd,SW_SHOWMAXIMIZED);//顯示最大化視窗
UpdateWindow(hMainWnd);//更新視窗


//下面用While()迴圈來建立訊息迴圈
while (GetMessage(&msg,NULL,0,0))//獲取訊息,填充msg結構體
{
TranslateMessage(&msg);//翻譯鍵盤訊息
DispatchMessage(&msg);//向視窗函式傳送訊息,讓視窗函式處理
}

return msg.wParam;
}
LRESULT  CALLBACK WndProc(HWND hMainWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
char messageleft[]="the left button have been pushed";//單機滑鼠時,訊息框將顯示的提示內容
char messageright[]="the right button have been pushed";//右擊,訊息框將顯示的提示內容
switch(message)
{
case WM_RBUTTONDOWN:
{
MessageBox(GetFocus(),messageright,"chen",MB_OK|MB_ICONINFORMATION);
break;
}
case WM_LBUTTONDOWN:
{
MessageBox(GetFocus(),messageleft,"chen",MB_OK|MB_ICONINFORMATION);
break;
}


case WM_DESTROY://關閉應用程式視窗時傳送的訊息
{
PostQuitMessage(0);//發出WM_QUIT訊息,結束應用程式
return 0;
}
default:
break;
}
return DefWindowProc(hMainWnd,message,wParam,lParam);//其他沒有處理的訊息交給Windows做預設處理
}
/*
hMainWnd=CreateWindow(
szClassName,//視窗結構體名字
szAppTitle,//視窗的標題
WS_OVERLAPPEDWINDOW,//視窗風格為可重疊視窗
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,//分別代表視窗左上角XY座標和視窗的高度、寬度,都使用預設值
NULL,//父視窗控制代碼
NULL,//視窗選單控制代碼
hInstance,//應用程式例項控制代碼
NULL//附加引數
);
*/
/*
第一個錯誤是:處理函式返回型別錯誤,MSDN上是這樣的:
LRESULT CALLBACK WindowProc(
_In_  HWND hwnd,
_In_  UINT uMsg,
_In_  WPARAM wParam,
_In_  LPARAM lParam
);
第二個錯誤是字元編碼:Unicode   與  ANSI 的問題  
有兩個方法:
方法一、就是在工程屬性裡,把Unicode改為多字元型別。
方法二,就是把字串全部寫成wchar_t型別就可以,就是把字串加上 _T(" ");
*/

/*還有個最簡單的錯誤:把英文的{}打成了中文的{},這個錯誤沒有提示,

注意觀察的話,就會發現滑鼠點選中文的{},

不會出現2個配套的標識,就代表是錯誤的,此時按Ctrl+K+F鍵將是無效的*/