不思議な現象が起こるプログラムで悩んでいます。
よろしくお願いします。
不思議な現象が起こるプログラムで悩んでいます。
『猫でもわかる第2版』を参考にして、『メモ帳』を作成しているのですが、コンパイルして作られた
メモ帳の動作を理解できません。
詳しい方、アドバイスをお願いします。
1、メニューを付けない『メモ帳』の時は、『直接入力、半角入力、全角入力』が可能、漢字変換も可能
問題点
1、メニューを付けない『メモ帳』の時、『コーディングしていないのに』右クリックでポップアップメニューが表示でき、切り取り、削除、貼り付け、その他が使える。
2,メニュー項目を付けると『直接入力が出来ない』、半角入力、全角入力は可能、但し、Enterキーを押すと、入力した文字が消えてしまう
3、コンパイルには、BCC, VC++の両方でテストしたが、結果は同じ
/*ウィンドウプロシージャ*/
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
int id;
RECT rc;
static HWND hEdit;
switch (msg){
case WM_CREATE:
hEdit = CreateWindow("EDIT", NULL,
WS_CHILD | WS_VISIBLE | ES_WANTRETURN |
ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL,
0, 0, 0, 0, hWnd, (HMENU)ID_EDIT, hInst, NULL);
strcat(szTitle, "「無題」");
SetWindowText(hWnd, szTitle);
break;
case WM_SIZE:
MoveWindow(hEdit, 0, 0, LOWORD(lp), HIWORD(lp), TRUE);
break;
SetWindowText(GetParent(hEdit),
"メモ帳[無題]");
case WM_SETFOCUS:
SetFocus(hEdit);
break;
/*case WM_COMMAND:
switch (LOWORD(wp)){
case IDM_NEW:
MyNew(hEdit);
break;
}
break;*/
case WM_CLOSE:
id = MyConfirm(hEdit);
if(id == IDCANCEL)
break;
id = MessageBox(hWnd, "終了してもいいですか",
"確認", MB_YESNO | MB_ICONQUESTION);
if(id == IDYES){
DestroyWindow(hEdit);
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
/*新規作成
int MyNew(HWND hEdit)
{
int id;
id = MyConfirm(hEdit);
if(id == IDCANCEL){
return -1;
}
Edit_SetText(hEdit, "");
SetWindowText(GetParent(hEdit),
"メモ帳[無題]");
strcpy(szFile, "");
return 0;
}*/
//文書保存の確認
int MyConfirm(HWND hEdit)
{
int id;
if(SendMessage(hEdit, EM_GETMODIFY, 0, 0) == TRUE){
id = MessageBox(hEdit,
"文書が更新されています。\n変更を保存しますか?",
"メモ帳",
MB_YESNOCANCEL | MB_ICONEXCLAMATION);
if(id == IDYES){
MySaveAs(hEdit);
}else if (id == IDCANCEL){
return IDCANCEL;
}else if (id == IDNO){
return IDNO;
}
}
return 0;
}
お礼
回答ありがとうございます。おかげで無事処理できるようになりました。