重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

プログラミング初心者です。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をそのまま取り出して使用してるのがまずいのではと思いますが、関数の使い方がわからず対処に困っています。教授いただければ幸いです。

A 回答 (1件)

Cの基本的なミスですね。



lpString == "close"
これは文字列の比較になっていません。
(アドレスを比較しています。)
strcmp( lpString , "close" ) == 0
としてください。

WinAPIでlstrcmpというのもあります。
lstrcmpA(lpString , "close") == 0
でも良いです。
    • good
    • 0
この回答へのお礼

あ………(汗)
一発で解決しました。
簡単なことだったんだあははは…って、
昨夜原因を究明すべく教科書を開いていたらstrcmp関数が
出ていました。なのに自分のやってることとまったく
結びつかなかった。その辺が初心者なんでしょうね。

furyfox様、迅速な回答有難うございました!
簡単なプログラムでも苦労した末に成功すると
格別に気分がいいですね~><

お礼日時:2007/06/13 19:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!