• ベストアンサー

WndProc( ) の UINT に msg を送る

sssoheiの回答

  • sssohei
  • ベストアンサー率33% (33/98)
回答No.1

SendMessage API、PostMessage API を調べてみてください。通常はSendMessage APIを使用します。 ただ、もし、同じプログラム内から呼び出すのであれば、(この例の場合)WM_SIZEでの処理を関数にしておいて、それを呼び出す方が設計的には良いと思います。

A__
質問者

お礼

ありがとうございます。 SendMessage( ) でできました。

関連するQ&A

  • WM_SIZEを発生させる方法

    コントロールを動的に初めて表示させた時にコントロールを ウインドウの大きさに合わせてリサイズさせようと思います。 SendMessageなどを使った2つのパラメータを指定する という方法ではなく、それ以外の方法でWM_SIZEを 発生させる方法を教えてください。 WM_SIZEにリサイズのソースが書いてあるので、ウインドウを 初めて表示させた時にもそれを利用しようとしているところです。

  • モーダレスダイアログのZindex

    基本のウインドウと1つのモーダレスダイアログという2つのウインドウを使ったアプリケーションなんですが、現在は基本のウインドウが必ずモーダレスダイアログの下に表示されてしまいます。基本のウインドウをアクティブにした場合、モーダレスダイアログより上に表示するにはどのようにすればいいですか? タイミングは、ダイアログでWM_KILLFOCUSが通知された時だと分かっていますが、基本ウインドウのスタイルなどで、こういった場合に基本ウインドウを最前面に持って来るというようなものがあればWM_KILLFOCUSでの処理は不用なんですが、どちらにしても方法やスタイルが分からないので教えてください。

  • プロセスとか

    101 case WM_CLOSE: 102  id = MessageBox(hWnd,"終了する?","",MB_YESNO); 103  if(id == IDYES)DestroyWindow(hWnd); 104 break; 105 case WM_DESTROY: 106  PostQuitMessage(0); 107 break; 103行目が実行されたら、WM_DESTROY が発生します。 そしたらそのまま104、105、106行目が順に実行されるんですか? それとも、103が実行されたら104が実行される前に、 新しいプロセスで WM_DESTROY が入った WndProc( ) が 実行されて、それと同時に104が実行されて break で ループが終了するんですか?

  • BCC32 右クリ イベント

    LRESULT CALLBACK WinWin(HWND hwnd,UINT mess,WPARAM wParam,LPARAM lParam) {  switch(mess){  case WM_LBUTTONDOWN:  処理;  break; これで、ウインドウ上でクリックした時の処理が実行できたけど。 ウインドウ上で右クリックした時の処理をさせるためには どういうソースを書けばいいのか教えてください。  case WM_RBUTTONDPWN: ではコンパイルエラーになりました。

  • 2重Func禁止。クリセク。セマフォ。

    MyFunc( ) の実行中は WM_LBUTTONDOWN を無視されるように しようと思いました。 LRESULT CALLBACK WndProc(… {  static bool b = TRUE;  switch(msg){  case WM_LBUTTONDOWN:   if(b){    b = FALSE;    MyFunc( ); //  MessageBox(hWnd, "", "", MB_OK);    b = TRUE;   }  break; でもこれでは、例えば MyFunc( ) が実行中に3回クリックすると その後に MyFunc( ) は3回実行されてしまいます。 MessageBox( ) を使えばうまくいくけと、それは使いたくありません。 できるだけ簡単なソースで、 MyFunc( ) の実行中のクリックで、後で MyFunc( ) が 実行されないようにするにはどこを直したらいいですか?

  • VBで作成したアプリのリサイズ方法

    VBで作成したアプリのリサイズ方法 VB2010を使用してアプリケーションを作成しました。 exeだけコピーしてノートPCで実行しようとしたところディスプレイサイズの違いではみ出してしまっています。 開発環境は1280x1024でアプリのサイズはほぼ全画面の大きさです。 ノートPCは1024x768です。 実行マシンの環境に合わせて勝手にリサイズされるものと思っていたので困っています。 アプリの実行サイズを簡単にリサイズ(縮小)できる方法はないでしょうか。。 よろしくお願い致します。

  • TextOut( ) が動かない

    LRESULT CALLBACK WndProc( HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){ PAINTSTRUCT ps; HDC hdc; switch(msg){ case WM_KEYDOWN:  if( wParam == VK_ESCAPE ){   hdc = BeginPaint(hWnd, &ps);   TextOut(hdc,0,0,str,strlen(str));   EndPaint(hWnd, &ps);  }  break; case WM_PAINT:  break; エスケープキーで文字表示をやりたいけど TextOut( ) が動作していないみたいでした。 switch(msg){ case WM_KEYDOWN:  if( wParam == VK_ESCAPE ){   hdc = BeginPaint(hWnd, &ps);   TextOut(hdc,0,0,str,strlen(str));   EndPaint(hWnd, &ps);  }  break; case WM_PAINT:  hdc = BeginPaint(hWnd, &ps);  TextOut(hdc,0,0,str,strlen(str));  EndPaint(hWnd, &ps);  break; とすると、常に文字が表示されたから、やっぱり case WM_KEYDOWN: の中の TextOut( ) が 動作していないんだと思いました。 TextOut( ) は case WM_PAINT: からのつながりが ある場合でないと実行されないんですか? ソースのおかしいところがあったら教えてください。

  • エディットの入力チェック

    こんばんわ。 エディットボックスをサブクラス化して 入力チェックを行いたいが、 どのMSGでどの様に行ったら良いのでしょうか? 条件 1.数値のみ入力可 2.10~96の時のみ入力可 #条件1と2を満たした数値のみ入力できるようにしたい サブクラス化、条件1は実装済。 WM_CHAR、EN_KILLFOCUS、 EN_UPDATEなどで CString csBuf; GetDlgItem(IDDxxxx)->GetWindowText(csBuf); と書くと、強制終了。 WM_KILLFOCUSで処理する時の引数は、 次のフォーカスのポインタなので、 利用不可。 なんらかの操作をした時に 親ウィンドウプロシージャで入力チェックしても良いのですが、 出来れば、入力したらすぐチェックしたいです。 環境、MFC、VC++6.0です。 条件2の数値が、1桁ならWM_CHARで簡単にできたのですが・・・ 宜しくお願い致します。

  • ActionScriptのイベント処理で任意の時間遅らせて処理する方法

    こんばんは。 現在、Actionscript3.0にてFLASHコンテンツを制作しております。 あるイベント処理の際に、任意の秒数処理を遅らせて実行したいと考えております。 例えば、 1.ブラウザのサイズを任意にリサイズする  (addEventListener RESIZEイベント呼び出し) ↓ 2.変更したサイズに合わせてステージ上のオブジェクトが指定の位置に移動する  (オブジェクトの位置を移動させる処理の実行) 2の動きを、ブラウザリサイズ後、任意の秒数置いてから実行させたいと考えています。 例で言うと以下サイトでブラウザをリサイズした際に、後からオブジェクトが追従するような動きです。 http://www.duras.jp/ ご教授宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 処理中に動的に変化する変数をウィンドウプロージャで表示させるには?

    Win32APIを使っています。 タイトルの通りウィンドウプロージャ以外(実際はダイアログプロージャ)である処理をしているとします。そこで変化する変数(時間など)をウィンドウに表示させ、かつ無効リージョンが発生しても大丈夫なようにしたいのですが、 現在は 処理を実行中に(ダイアログプロージャ内で)変数aが変わった瞬間、グローバル変数flag=TRUEにし、次に SendMessage(hwnd,WM_PAINT,0,0); を実行し、 ウィンドウプロージャでは case :WM_PAINT if(flag) "aを表示する命令"; という感じにしています。しかしこれでは表示してくれません。 どこか変なことしてますか? また別の方法はありますか? 必要であればソース見せます。 よろしくお願いします。