h – プログラミング – Home

通知
すべてクリア

h


初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

#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;
}


引用解決済
トピックタグ
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

すいません。確認中、送信を押しました。

1 WNDCLASS構造体の初期化
2 RegisterClass()、構造体を登録
3 CreateWindowで、ウインドウ生成

次から解らないのですが、

4 while文からウインドウプロシージャへ?
5 WM_PAINTで文字描画。

このプログラムの流れが見えないのですが、教えてください。

特にどのタイミングで、PeekMessage()の
else{num++; InvalidateRect()}文が呼び出されのか教えてください。

お願いします。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

ん? MFCを使っていた人ですか?

改めてSDKを使ってみるならば、書籍の購入を進めます。

普通に「新規作成」の「Win32 Aplication」を選択すればMFC同様
ある程度動かすことの出来るソースコードを作成してくれます。

VCは、6.0でしたっけ?
VC6.0場合は、「標準的なhalloアプリケーション」を選択します。
そこで作成されるソースコードをみて流れを掴んでみてください。

詳しくは、書籍を読んでみたらどうですか。
サイトで学ぶよりいいです。


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

> 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);
}


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

# http://forums.belution.com/ja/cpp/000/064/54.shtml
# このような質問の仕方を「マルチポスト」といいます。
# http://rararahp.cool.ne.jp/cgi-bin/lng/lng.htm


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

> 特にどのタイミングで、PeekMessage()の
> else{num++; InvalidateRect()}文が呼び出されのか教えてください。

PeekMessageが0を返したとき。
というかmsdnなどヘルプや説明を見たら。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました