- ベストアンサー
c言語win32apiで孫ウインドウからメッセージ処理ができません
- c言語win32apiで孫ウインドウからメッセージ処理ができません。親ウインドウを作りその中に子ウインドウを作りさらに孫ウインドウを作りました。孫ウインドウからwindprocにメッセージを飛ばすにはどうしたらいいんでしょうか。
- 開発環境はVC++ExpressEdition2008を使っています。
- 孫ボタンをクリックしたらwindprocにメッセージが飛ばない問題が発生しています。親をAに変更すると正常に動作しますが、孫ウインドウからメッセージを飛ばす方法はあるのでしょうか。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- C言語とWin32APIで全角かなの文字を取得する方法について。
いつも、お世話になっております。 小生、只今、WinXPSP3上でC言語とWin32APIを使い、BCC5.5.1でコンパイルしながら、Windowsプログラミングを勉強しています。 今回、ご質問させて頂きたい内容は、 クライアント領域において、全角かなの文字を取得する方法についてです。 自分自身で考えてみたのですが、WM_CHARメッセージの箇所を工夫して利用し、文字を取得する方法と、エディットコントロールにて文字を取得する方法です。 自分自身、WM_CHARメッセージを最近、勉強し始めたところなので、 出来ればWM_CHARメッセージを使用し、処理してみたいのですが。。。 以上です。 お忙しい中、本当に申し訳ございませんが、先輩方アドバイス宜しくお願いします。
- ベストアンサー
- C・C++・C#
- Win32APIを始めたのですが・・・。
Window Handleについての質問です。Win32APIではCreateWindow()でチェックボックスを作ることが出来るのですが、 C++でプログラミングしていたところ、困ったことになりました。 まず、クラスのメンバーとしてHWND m_Hwndを宣言し、メンバー関数(CreateChk())において m_Hwnd = CreateWindow(...)とし、WM_CREATEのメッセージ処理内で関数CreateChk()を呼び出して チェックボックスを作るようにしたのですが、WM_CREATEのメッセージ処理を終えると同時にm_Hwndの内容が意味を持たないものに 変わってしまい、チェックボックスの状態を利用することが出来ません。 変数の寿命に関係したものだとは思うのですが、クラスを用いたオブジェクト指向プログラミングも始めたばかりでよくわかりません。 どなたか対処方法をご存知でないでしょうか?
- ベストアンサー
- C・C++・C#
- Win32 APIを使ったWindowsプログラミング製作について質問です
只今、VisualStudio2005のVC++でWin32 APIを使ってWindowsアプリケーション製作の練習をしています。今、ドラゴンクエストIのようなゲームを作りたいと思っており、画面に画像を表示し、キーボードの十字キーで操作できるようにしていますが、ここまでやっていて一つ不思議に思ったことがあります。それは、画像の読み込みや表示・キーボードの入力などすべてをウィンドウプロシージャ内にコーディングしています。WinMain()関数内には、ウィンドウの登録・生成・表示という当たり前の処理しかありません。これから、戦闘の処理なども加えていきますが、それを考えてもWM_PAINTやWM_KEYDOWNなどのメッセージ内で事足りるような気がします。アプリの製作の経験はほとんどない初心者なので、C言語みたいにMain()関数内にほとんど処理を記述しないのが不安に思います。自分の書き方は間違っているのかどうなのか、何か参考になる意見をいただけないでしょうか?どうかよろしくお願い致します。
- ベストアンサー
- C・C++・C#
- Win32 APIに関する質問
Win32 APIでwidowsプログラミングをしているのですが、 メニューを開きとあるダイアログを開きボタン(これを押すとエディットから、入力されている文字列を取得する) を押すとエディットに入力されている、文字列をメッセージボックスに表示するはずなんですが (Messengerはその問題のボタンがついているプログラム) 「Messenger が原因で USER.EXEにエラーが発生しました。Messenger は終了します」 と出てそのプログラム(Messenger)が、終了させられてしまいます。 GetDlgText()というAPIが原因だと言う所までは分かりましたが、そこからさきがまったく分かりません このバグの解決方法を教えてください ↓がソースです(結構長いのでダイアログのコールバックだけ書きます) BOOL CALLBACK Dialog_RoomOption(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp){ int error; LPTSTR s; HWND edit_RoomAbout; switch(msg){ case WM_INITDIALOG: SetDlgItemText(hwnd,EID_PASSWORDEDIT,"パスワードを入力してください"); return TRUE; case WM_COMMAND: switch(LOWORD(wp)){ case BID_CREATE: GetDlgItemText(hwnd,EID_PASSWORDEDIT,RoomPassword,sizeof(RoomPassword)); MessageBox(hwnd,RoomPassword,TEXT("TESTTEST"),MB_OK); EndDialog(hwnd,BID_CREATE); return TRUE; } break; case WM_CLOSE: EndDialog(hwnd,NULL); return TRUE; } return FALSE; }
- ベストアンサー
- C・C++・C#
- Win32APIを使って入力されたキーによって表示する画像を変えるプログラムについて
Win32APIを使って入力されたキーによって表示する画像を変えるプログラムを今、VisualSutudio2005のVC++で作っている最中なのですが、 上手く画像が表示されず困っています。具体的には、キーボードからキーが入力されたらTranslateMessage関数でWM_CHARメッセージを送って、その値(wParam)をWM_CHARメッセージ内でTCHAR型の変数に代入し、InvalidateRect関数を使ってWM_PAINTメッセージを送って、再描画処理を行ってその中で、if(tchar == 'a') { hbitmap = (HBITMAP)LoadImage(NULL,BMP,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SelectObject(hMemdc,hbitmap); GetObject(hbitmap,sizeof(BITMAP),&bitmap); BitBlt(painthdc,0,0,350,467,hMemdc,0,0,SRCCOPY); } という処理をしてaが入力されたら読み込んだ画像を表示!という形にしたいのですが、実際ウィンドウには表示されなくて悩んでいます。わかりにくくて誠に申し訳ありませんが、どなたかどうかご教授願えないでしょうか。何卒よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- 孫ウィンドウから親ウィンドウを操作
javascriptを使用して以下の物を作りたいと考えています。 1.親ウィンドウから子ウィンドウを開く 2.子ウィンドウから孫ウィンドウを開き、自動的に子ウィンドウを閉じる 3.孫ウィンドウから親ウィンドウのページを切り替え、自動的に孫ウィンドウを閉じる 2までは出来たのですが、3は子ウィンドウを閉じてしまう為にopenerが使えません。 他の方法も調べてみたのですが、どうしてもうまくいきませんでした。 何か良い方法はないでしょうか?
- ベストアンサー
- JavaScript
- C#プログラミングに役立つAPIの本???
もっぱらC#を使用しています C言語のプログラム遺産の活用等には全く縁の無い私です だから今後もC#だけで行こうと思っております VC++などに移る気などサラサラありません それ故に、念のために ・・・・・ 実は内心では心配だから、APIだけは勉強しておこうと思って教科書を探しました 日経ソストウエアが出版している『APIで学ぶWINDOWS』¥2095を購入しましたが的外れ! ウインドウズの解説本でありプログラミングには役立ちません 更にC#プログラミングに役立つAPIの本を探したのですが、適当なものが見つかりません ご存知でしたら教えてください、お願い申し上げます
- ベストアンサー
- C・C++・C#
- C言語とWin32APIで全角のカタカナの文字を取得、表示する方法について。
いつも、お世話になっております。 小生、只今、WinXPSP3上でC言語とWin32APIを使い、BCC5.5.1でコンパイルしながら、Windowsプログラミングを勉強しています。 今回、ご質問させて頂きたい内容は、 1.ウィンドウを作成。 2.1で作成したウィンドウに全角のカタカナを1文字入力。 3.入力されたカタカナを入力した箇所の下に描画。 4.再度、カタカナの文字があった場合は、入力されている文字を消去し、2のステップに戻る。 5.カタカナ以外の文字が入力された場合はメッセージボックスにて、 "カタカナ以外の文字が入力されました"を出現させ、クライアント領域には何も描画しない。 以上です。 前回、同じような質問を投稿させて頂いた際に、WM_CHARメッセージの箇所を工夫して利用し、文字を取得する方法をお教え頂いたので、WM_CHARメッセージでの処理の仕方をご教授願いたいと思っております。 そして、あつかましいようで申し訳ございませんが、ソースを記述して頂く際、C言語での記述で宜しくお願い致します。 以上です。 色々とわがままを言い、本当に申し訳ございません。 お忙しい中、本当に申し訳ございませんが、先輩方アドバイス宜しくお願いします。
- ベストアンサー
- C・C++・C#
- コンソールアプリケーションでのWIN32 APIメッセージ処理
コンソールアプリケーションでのWIN32 APIメッセージ処理 VisualStdio.NET 2005のC++で作成しているコンソールアプリケーションで、 PostMessageでメッセージを送信しているのに、PeekMessageで検出できません。 下のプログラムに誤った点があるのでしょうか? 尚、ウィンドウハンドルの確認部分はパスしますが、 PostMessageとPeekMessageの引数hWndをNULLに置き換えるとメッセージの検出はできるので、 やはり、ウィンドウハンドルに問題があるのかもしれません。 #include <windows.h> #include <stdio.h> void main( void ) { char OldTitle[1024], NewTitle[1024]; char WindowText[1024], ConsoleTitle[1024]; HWND hWnd; MSG Msg; /*** ウィンドウハンドルの取得 ***/ GetConsoleTitle( OldTitle, 1024 ); wsprintf( NewTitle, "%d/%d", GetTickCount(), GetCurrentProcessId()); SetConsoleTitle( NewTitle ); Sleep(40); hWnd = FindWindow( NULL, NewTitle ); SetConsoleTitle( OldTitle ); /*** ウィンドウハンドルの確認 ***/ GetWindowText( hWnd, WindowText, 1024 ); GetConsoleTitle( ConsoleTitle, 1024 ); if ( strcmp( WindowText, ConsoleTitle ) != 0 ){ printf( "ウィンドウハンドルが不正です" ); return; } /*** メッセージの送信と検出 ***/ PostMessage( hWnd, 1050, 0, 0 ); do{ while ( PeekMessage( &Msg, hWnd, 0, 0, PM_REMOVE )){ printf( "メッセージを検出しました" ); return; } } while( 1 ); }
- ベストアンサー
- C・C++・C#
補足
アドバイスありがとうございますm(_)m すごく役立ちました。 教えていただいた通りサブクラス化したらちゃんとメッセージ処理できました。 メッセージの飛ぶ仕組みが理解できました。 ほんとにありがとうございます。