#include <windows.h>
unsigned int num;
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
HDC hdc;
PAINTSTRUCT ps;
static TCHAR str[64];
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
wsprintf(str , %d , num);
TextOut(hdc , 10 , 10 , str , lstrlen(str));
EndPaint(hwnd , &ps);
}
return DefWindowProc(hwnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT(KITTY);
if (!RegisterClass(&winc)) return -1;
hwnd = CreateWindow(
TEXT(KITTY) , TEXT(Kitty on your lap) ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (hwnd == NULL) return -1;
while (TRUE) {
if (PeekMessage(&msg , NULL , 0 , 0 , PM_REMOVE)) {
if(msg.message == WM_QUIT) break;
DispatchMessage(&msg);
}
else {
num++;
InvalidateRect(hwnd , NULL , FALSE);
}
}
return msg.wParam;
}
すいません。確認中、送信を押しました。
1 WNDCLASS構造体の初期化
2 RegisterClass()、構造体を登録
3 CreateWindowで、ウインドウ生成
次から解らないのですが、
4 while文からウインドウプロシージャへ?
5 WM_PAINTで文字描画。
このプログラムの流れが見えないのですが、教えてください。
特にどのタイミングで、PeekMessage()の
else{num++; InvalidateRect()}文が呼び出されのか教えてください。
お願いします。
ん? MFCを使っていた人ですか?
改めてSDKを使ってみるならば、書籍の購入を進めます。
普通に「新規作成」の「Win32 Aplication」を選択すればMFC同様
ある程度動かすことの出来るソースコードを作成してくれます。
VCは、6.0でしたっけ?
VC6.0場合は、「標準的なhalloアプリケーション」を選択します。
そこで作成されるソースコードをみて流れを掴んでみてください。
詳しくは、書籍を読んでみたらどうですか。
サイトで学ぶよりいいです。
> 4 while文からウインドウプロシージャへ?
これに関しては、DispatchMessage()が大雑把以下のような実装になっている
と言えば理解できますでしょうか。
LONG WINAPI DispatchMessage(const MSG * msg)
{
WNDPROC proc = (WNDPROC)GetClassLong(msg->hwnd, GCL_WNDPROC);
return (*proc)(msg->hwnd, msg->message, msg->wParam, msg->lParam);
}
# http://forums.belution.com/ja/cpp/000/064/54.shtml
# このような質問の仕方を「マルチポスト」といいます。
# http://rararahp.cool.ne.jp/cgi-bin/lng/lng.htm
> 特にどのタイミングで、PeekMessage()の
> else{num++; InvalidateRect()}文が呼び出されのか教えてください。
PeekMessageが0を返したとき。
というかmsdnなどヘルプや説明を見たら。