• 締切済み

ウィンドウアプリが思うように動かない(GetWindowTextの使い方?)

プログラミング初心者です。Windows XP, Visual Studio 2005 PE 使用。MFCは使わない(というより使い方がわからない…)。 簡単なウィンドウプログラムを作っています。エディットボックス1つとボタン1つを含むもので、ボタンを押すとエディットボックスの文字列を取得して、もしそれが close であればプログラムを終了するようにしたいんです。 自分で書いたコードの一部(プロシージャのみ)を以下に載せます。WM_CREATE、WM_DESTROYメッセージは省略。edit1はエディットボックスのハンドル、case式の2はボタンの子ウィンドウIDです。 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ char lpString[6]; switch(msg){ case WM_COMMAND: switch(LOWORD(wParam)) { case 2: GetWindowText(edit1,lpString,6); if(lpString == "close") SendMessage(hWnd, WM_CLOSE, 0, 0); else SendMessage(edit1, WM_CLEAR, 0, 0); return 0; } return 0; default : return DefWindowProc(hWnd,msg,wParam,lParam); } return 0; } Visual Studioではちゃんとビルドしてくれるんですが、いざ実行してcloseと入力した上でボタンを押してもうんともすんとも言いません。原因は何でしょうか?素人ながらlpStringをそのまま取り出して使用してるのがまずいのではと思いますが、関数の使い方がわからず対処に困っています。教授いただければ幸いです。

みんなの回答

  • furyfox
  • ベストアンサー率56% (58/103)
回答No.1

Cの基本的なミスですね。 lpString == "close" これは文字列の比較になっていません。 (アドレスを比較しています。) strcmp( lpString , "close" ) == 0 としてください。 WinAPIでlstrcmpというのもあります。 lstrcmpA(lpString , "close") == 0 でも良いです。

ladridos
質問者

お礼

あ………(汗) 一発で解決しました。 簡単なことだったんだあははは…って、 昨夜原因を究明すべく教科書を開いていたらstrcmp関数が 出ていました。なのに自分のやってることとまったく 結びつかなかった。その辺が初心者なんでしょうね。 furyfox様、迅速な回答有難うございました! 簡単なプログラムでも苦労した末に成功すると 格別に気分がいいですね~><