绝大大部分菜单操作无响应。是函数/参数用错了吗?
平台:VC++6.0 SP3
WINDOWS XP Professional(BOJONE V7)
哥哥姐姐,侠哥侠姐些。拜托了。
LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
{
static int iColorID[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH}; //用于替换背景颜色
static int iSelection = IDM_WHITE; //默认背景颜色
static HINSTANCE hInstance;
HMENU hMenu;
switch(iMsg)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;//创建成功了吗?
return 0;
case WM_COMMAND:
hMenu = GetMenu(hwnd);
switch(LOWORD(wParam))
{
//...省略其他相同代码
case IDM_SAVEAS:
MessageBeep(-1); //点击响应一声
return 0;
case IDM_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0L);//能够正常退出
return 0;
case IDM_DEL:
MessageBeep(-1); //点击响应一声
return 0;
//以下部分意图为更换对应选中背景颜色,但是相应菜单操作无响应,错在哪里啊?看了2天。看MSDN和百度没找到错误的原因。还是菜鸟~
case IDM_WHITE:
case IDM_LTGRAY:
case IDM_GRAY:
case IDM_DKGRAY:
case IDM_BLACK:
CheckMenuItem(hMenu,iSelection,MF_UNCHECKED);
iSelection=LOWORD(wParam);
CheckMenuItem(hMenu,iSelection,MF_CHECKED);
SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(iColorID[LOWORD(wParam)-IDM_WHITE]));
InvalidateRect(hwnd,NULL,TRUE);
return 0;
//计时器也是没反应。哭。。。
case IDM_START:
if(SetTimer(hwnd,1,1000,NULL))
{
EnableMenuItem(hMenu,IDM_START,MF_GRAYED);
EnableMenuItem(hMenu,IDM_STOP,MF_ENABLED);
}
return 0;
case IDM_STOP:
KillTimer(hwnd,1);
EnableMenuItem(hMenu,IDM_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_STOP,MF_GRAYED);
return 0;
case IDM_HELP:
MessageBox(hwnd,"Help not yet implemented.",szAppName,MB_ICONEXCLAMATION |MB_OK);
return 0;
//对话框也是弹不出来。怎么回事啊?
case IDM_ABOUT:
DialogBox(hInstance,"AboutBox",hwnd,AboutDlgProc);
return 0;
}
break;
case WM_TIMER:
MessageBeep(-1);
return 0;
case WM_DESTROY:
PostQuitMessage(-1);
return 0;
}
return DefWindowProc(hwnd,iMsg,wParam,lParam);
}
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT iMsg,WPARAM wParam,LPARAM lParam)
{
switch(iMsg)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg,0);
return TRUE;
}
break;
}
return FALSE;
}