忍者ブログ

銀朱工房

クッソ初心者がダンジョンRPGを作成する パソコンって何ですかって人が頑張ってダンジョンRPGを作ったローという感じ クソゲーが出来上がる過程を報告って感じですね やった内容は右のカテゴリーから参照お願いいたします。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

メッセージループを作成する

またコケタ(window表示にて)その4

で作成したソースのウインドウプロシージャ
を以下に変更する
さらにメッセージループを作成する

LRESULT CALLBACK WindowProc ( HWND hWnd, UINT uMsg,   ←ウインドウプロシージャ
                         WPARAM wParam, LPARAM lParam )
{
  switch( uMsg ) {
  case WM_DESTROY:
    PostQuitMessage( 0 );
    return 0;
  }
  return DefWindowProc( hWnd, uMsg, wParam, lParam );
}



{
  HWND hWnd;
  WNDCLASS winclass;
  MSG msg;      ←メッセージ送信用に宣言しておく
 
  winclass.style = CS_HREDRAW | CS_VREDRAW;
  winclass.lpfnWndProc = WindowProc;  ←ここを作成したプロシージャを登録する
  winclass.cbClsExtra = 0;
  winclass.cbWndExtra = 0;
  winclass.hInstance = hInstance;
  winclass.hIcon = NULL;
  winclass.hCursor = NULL;
  winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  winclass.lpszMenuName = NULL;
  winclass.lpszClassName = WIN_NAME;



 /* ↓メッセージループ */
  while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {  ←PostQuitMessageが呼ばれると0で抜ける
    DispatchMessage( &msg );    ←メッセージ送信するヨ
  }



ほんで、コンパイルする (=´ー`)ノ ヨロシク

実行結果


ウインドウの移動とか最大最小とかできました
ヾ(●⌒∇⌒●)ノ わーい

拍手[0回]

PR

メッセージをウインドウプロシージャに送る

DispatchMessage()関数を使うらしい

msdn様より
1 つのウィンドウプロシージャへメッセージをディスパッチ(送出)します。一般的に、Getmessage 関数が取得したメッセージをディスパッチするために、この関数を使います。

宣言
LRESULT DispatchMessage (
CONST MSG *lpmsg // メッセージ情報
);

どうやらこれでメッセージループ作成してウインドウ動かせそうっす

ディスパッチって何かわかんないので大先生に聞いて見た
実行可能なプロセスやタスクなどに対してマイクロプロセッサの計算能力を割り当てること。
だそうです。

っつーことは単に登録されてるウィンドウプロシージャにメッセージを割り当てるとか
そういう感じかな?よーわからんが

拍手[0回]

ウインドウプロシージャとは

ウインドウプロシージャ
ウインドウに何らかのイベントが発生するたびに
呼び出されるコールバック関数

基本的な動作をしてくれるDefWindowProc()関数が用意されている
msdn様より
既定のウィンドウプロシージャを呼び出して、
アプリケーションが処理しないウィンドウメッセージに対して、
既定の処理を提供します。この関数は、
すべてのメッセージが処理されることを保証します。
DefWindowProc 関数には、
既定のウィンドウプロシージャが受け取るのと同じパラメータが渡されます。
だそうです。

WNDCLASS構造体のlpfnWndProcメンバに指定することで
ウインドウと関連付ける

宣言:WNDPROC型
LRESULT CALLBACK WindowProc(
    HWND hwnd, UINT, uMsg, WPARAM wParam, LPARAM lparam );

ほー、ほー
なるほど、メッセージループの終了はウインドウ破棄のイベントから
PostQuitMessage()関数を呼び出して終了を
指定してるわけか
PostQuitMessage()→メッセージ(WM_QUIT)→Getmessage()→return0で
ループ抜ける
んでラストまでいくっぽいね

拍手[0回]

メッセージとは2

メッセージはメッセージメンバのwParam, lParam
に格納される
typedef struct tagMSG {
  HWND   hwnd;    //ウインドウハンドル
  UINT   message; //メッセージ
  WPARAM wParam;  //副メッセージ
  LPARAM lParam;  //副メッセージ
  DWORD  time;    //ポストされた時間
  POINT  pt;      //マウス位置
  } MSG;

メッセージキューからメッセージを取得するには
Getmessage()関数を使う

BOOL GetMessage(
  LPMSG lpMsg, HWND hwnd,
  UINT wMsgFilterMin, UINT wMsgFilterMax );

指定したウインドウのメッセージをMSG構造体に格納する

メッセージループにて
GetMessage関数を呼び出してウインドウのキューにメッセージが
入るのを待ってそのメッセージによって
アプリで動作を指定してやればなんか
アプリっぽい動きができる
基本の考え方は↑らしいです

拍手[0回]

プロフィール

HN:
ンメローン
性別:
男性
職業:
なんちゃってソフト屋さん
趣味:
いろいろある多趣味である
自己紹介:
寝るのが大好きなキモオタです。
しいていうなら、
ただの通りすがりのメロンみたいなものですよ

カレンダー

08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

ブログ内検索

フリーエリア

最新CM

[08/30 imitazione cartier anelli oro donna]
[02/17 kos3xnqd9v3]
[02/16 uem4paid3j2]

バーコード

コガネモチ

P R

ページ