lesson 1:Windowsプログラムの動作原理とプログラム作成プロセス(vc++詳細)
8463 ワード
前言:ウィンドウ生成プロセス、ハンドル原理、メッセージキュー、コールバック関数、ウィンドウクローズとアプリケーション終了の作業関係. Windows APIとWin 32 SDKオペレーティングシステムはWindowsアプリケーションの開発に便利なプログラミングインターフェースを提供し、これらの関数はすべてWindowsにある.hヘッダファイルに宣言します.Win 32 SDK(Software Development Kit):Windows 32ビットプラットフォームのソフトウェア開発パッケージです.API関数、ヘルプドキュメント、マイクロソフトが提供するいくつかの補助開発ツールが含まれています. ウィンドウとハンドルウィンドウは、画面上の矩形領域であり、Windowsアプリケーションがユーザーと対話するインタフェースである.Windowsアプリケーションでは、ウィンドウはウィンドウハンドル(HWND)で識別され、あるウィンドウを操作するには、まずこのウィンドウのハンドルを取得します.その他のさまざまなリソース(ウィンドウ、アイコン、カーソルなど)は、これらのリソースを作成するときにメモリを割り当て、これらのリソースを識別する識別番号、すなわちハンドルを返します.eg:カーソルハンドル(HCURSOR)、アイコンハンドル(HICON)など. メッセージとメッセージキューWindowsプログラム設計は、メッセージベースのイベント駆動方式のプログラム設計モードである.メッセージは、Windowsにおいて構造体MSGによって表される.MSG構文はMSDNを参照してください.
typedef struct tagMSG{HWND hwnd;//メッセージが属するウィンドウハンドルUINT message;//メッセージ自体識別子WPARAM wParam;//メッセージに関する追加情報LPARAM lParamを指定する;DWORD time;//メッセージの発行時間POINT ptを指定する;//メッセージの発行時の位置}MSG;
≪メッセージ・キュー|Message Queue|emdw≫:Windowsアプリケーションが作成されるたびに、プログラム1のウィンドウのメッセージを格納するメッセージ・キューが作成されます.メッセージが生成された後、メッセージ・キューに送信され、アプリケーションはメッセージ・ループが絶えないメッセージ・キューからメッセージを取り出して応答します.応答プロセスは、システムからアプリケーションにメッセージを送信します.実際には、アプリケーションを呼び出すメッセージ処理関数です.
ウィンドウの作成を実現する完全なWin 32プログラムを作成します.主な手順は次のとおりです. WinMain関数の定義 ウィンドウを作成し、完全なウィンドウを作成する4つのステップ:1ウィンドウクラスを設計し、2ウィンドウクラスを登録し、3ウィンドウを作成し、4ウィンドウ を表示する.は、メッセージループ を行う.ウィンドウプロセス関数 を記述する
関連コード:
小結:ハンドルハンドル(handle)について、リソースの識別.オペレーティングシステムがこれらのリソースを管理および操作するには、ハンドルによって対応するリソースが見つかります.リソースのタイプによって、ハンドルをアイコンハンドル(hicon)、カーソルハンドル(hcursor)、ウィンドウハンドル(hwnd)、アプリケーションインスタンスハンドルに細分化することもできます.(hinstance)など様々なタイプのハンドル.オペレーティングシステムが各ウィンドウに指定した一意の識別番号、すなわちウィンドウハンドル.
WinMain関数システムエントリ関数
強制変換->コンパイル時にエラーは発生せず、実行時にエラーが発生します.
BeginPaint EndPaintリリースはWM_のみPAINTで使用GetDCの後、ReleaseDCを解放する必要がある.if(1==x)は定数を前に書いて、理解しやすい.メッセージループ時にdefault文が少なくない必要があります.
typedef struct tagMSG{HWND hwnd;//メッセージが属するウィンドウハンドルUINT message;//メッセージ自体識別子WPARAM wParam;//メッセージに関する追加情報LPARAM lParamを指定する;DWORD time;//メッセージの発行時間POINT ptを指定する;//メッセージの発行時の位置}MSG;
≪メッセージ・キュー|Message Queue|emdw≫:Windowsアプリケーションが作成されるたびに、プログラム1のウィンドウのメッセージを格納するメッセージ・キューが作成されます.メッセージが生成された後、メッセージ・キューに送信され、アプリケーションはメッセージ・ループが絶えないメッセージ・キューからメッセージを取り出して応答します.応答プロセスは、システムからアプリケーションにメッセージを送信します.実際には、アプリケーションを呼び出すメッセージ処理関数です.
ウィンドウの作成を実現する完全なWin 32プログラムを作成します.主な手順は次のとおりです.
関連コード:
/************************************************************************
Author: wuc
Mail: [email protected]
Time: 13:24:19/2017-9-7
Name: WinMain
Function:
Version:
************************************************************************/
#include
#include
LRESULT CALLBACK WindowProc(
HWND hwnd, //
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain( //WinMain Windows
HINSTANCE hInstance, // :
HINSTANCE hPrevInstance, //int WINAPI WinMain(
LPSTR IpCmdLine, //HINSTANCE hInstance,
int nCmdShow //HINSTANCE hPrevInstance,
) //LPSTR lpCmdLine,
//int nCmdShow
//);
{ //
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //(HBRUSH)
wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); //
wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO); //
wndcls.hInstance=hInstance; //
wndcls.lpfnWndProc=WindowProc; //
wndcls.lpszClassName=L"Weixin2008"; //
wndcls.lpszMenuName=NULL; // ,
wndcls.style=CS_HREDRAW | CS_VREDRAW; //
RegisterClass(&wndcls); //
HWND hwnd; //
hwnd=CreateWindow(L"Weixin2008",L" ",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL); //
UpdateWindow(hwnd); //
//
MSG msg; //
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc( //
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg) //
{
case WM_CHAR: //
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,LPCWSTR(szChar),L"weixin",0);
break;
case WM_LBUTTONDOWN: //
MessageBox(hwnd,L"mouse clicked",L"weixin",0);
HDC hdc;
hdc=GetDC(hwnd); // ,
TextOut(hdc,0,50,L" ",strlen(" "));
ReleaseDC(hwnd,hdc); // DC
break;
case WM_PAINT: //
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd,&ps);
TextOut(hDc,0,0,L"Windows ",strlen("Windows "));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,L" ?",L"weixin",MB_YESNO))
{
DestroyWindow(hwnd);
}
case WM_DESTROY:
PostQuitMessage(0); // ,
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); //
}
return 0;
}
小結:ハンドルハンドル(handle)について、リソースの識別.オペレーティングシステムがこれらのリソースを管理および操作するには、ハンドルによって対応するリソースが見つかります.リソースのタイプによって、ハンドルをアイコンハンドル(hicon)、カーソルハンドル(hcursor)、ウィンドウハンドル(hwnd)、アプリケーションインスタンスハンドルに細分化することもできます.(hinstance)など様々なタイプのハンドル.オペレーティングシステムが各ウィンドウに指定した一意の識別番号、すなわちウィンドウハンドル.
WinMain関数システムエントリ関数
強制変換->コンパイル時にエラーは発生せず、実行時にエラーが発生します.
BeginPaint EndPaintリリースはWM_のみPAINTで使用GetDCの後、ReleaseDCを解放する必要がある.if(1==x)は定数を前に書いて、理解しやすい.メッセージループ時にdefault文が少なくない必要があります.