win32 写的程序,加入了资源菜单,可运行是没有菜单显示。大侠帮忙!
同过加入 resource script 添加的菜单资源,可运行是没有菜单显示,小的实在找不到原因,求大侠帮忙:感激涕零!
.c文件如下:
# include <windows.h>
# include "resource.h "
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK AboutDlgProc(HWND,UINT,WPARAM,LPARAM);
intiCurrentColor = IDC_BLACK,iCurrentFigure = IDC_RECT;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHARszAppName[] = TEXT( "About2 ");
HWNDhwnd;
MSGmsg;
WNDCLASSwndclass;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon = LoadIcon(hInstance,szAppName);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = szAppName;
wndclass.lpszMenuName = szAppName;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclass);
hwnd = CreateWindow(szAppName,TEXT( "About Box Demo Program "),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
void PaintWindow(HWND hwnd,int iColor,int iFigure)
{
static COLORREFcrColor[8] = {RGB(0,0,0),RGB(0,0,255),RGB(0,255,0),RGB(0,255,255),
RGB(255,0,0),RGB(255,0,255),RGB(255,255,0),RGB(255,255,255)};
HBRUSHhBrush;
HDChdc;
RECTrect;
hdc = GetDC(hwnd);
GetClientRect(hwnd,&rect);
hBrush = CreateSolidBrush(crColor[iColor - IDC_BLACK]);
if (iFigure == IDC_RECT)
Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
else
Ellipse(hdc,rect.left,rect.top,rect.right,rect.bottom);
DeleteObject(SelectObject(hdc,hBrush));
ReleaseDC(hwnd,hdc);
}
void PaintTheBlock(HWND hCtrl,int iColor,int iFigure)
{
InvalidateRect(hCtrl,NULL,TRUE);
UpdateWindow(hCtrl);
PaintWindow(hCtrl,iColor,iFigure);
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HINSTANCEhInstance;
PAINTSTRUCTps;
switch(message)
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)-> hInstance;
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_APP_ABOUT:
if (DialogBox(hInstance,TEXT( "AboutBox "),hwnd,AboutDlgProc))
InvalidateRect(hwnd,NULL,TRUE);
return 0;
}
break;
case WM_PAINT:
BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
PaintWindow(hwnd,iCurrentColor,iCurrentFigure);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
static HWNDhCtrlBlock;
static intiColor,iFigure;
switch(message)
{
case WM_INITDIALOG:
iColor = iCurrentColor;
iFigure = iCurrentFigure;
CheckRadioButton(hDlg,IDC_BLACK,IDC_WHITE,iColor);
CheckRadioButton(hDlg,IDC_RECT,IDC_ELLIPSE,iFigure);
hCtrlBlock = GetDlgItem(hDlg,IDC_PAINT);
SetFocus(GetDlgItem(hDlg,iColor));
return FALSE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
iCurrentColor = iColor;
iCurrentFigure = iFigure;
EndDialog(hDlg,TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,FALSE);
return TRUE;
case IDC_BLACK:
case IDC_RED:
case IDC_GREEN:
case IDC_YELLOw:
case IDC_BLUE:
case IDC_MAGENTA:
case IDC_CYAN:
case IDC_WHITE:
iColor = LOWORD(wParam);
CheckRadioButton(hDlg,IDC_BLACK,IDC_WHITE,LOWORD(wParam));
PaintTheBlock(hCtrlBlock,iColor,iFigure);
return TRUE;
case IDC_RECT:
case IDC_ELLIPSE:
iFigure = LOWORD(wParam);
CheckRadioButton(hDlg,IDC_RECT,IDC_ELLIPSE,LOWORD(wParam));
PaintTheBlock(hCtrlBlock,iColor,iFigure);
return TRUE;
}
break;
case WM_PAINT:
PaintTheBlock(hCtrlBlock,iColor,iFigure);
break;
}
return FALSE;
}
[解决办法]
wndclass.lpszMenuName = MAKEINTRESOURCE(ABOUT2);
[解决办法]
1、wndclass.lpszMenuName = (LPCTSTR)ABOUT2; //需与你资源文件中菜单定义的部分相对应
2、有可能你没把rc文件加到工程里。
[解决办法]
if (DialogBox(hInstance,TEXT( "AboutBox "),hwnd,AboutDlgProc))=====> >
if (DialogBox(hInstance,MAKEINTRESOURCE(ABOUTBOX),hwnd,AboutDlgProc))