读书人

win32 写的程序加入了资源菜单可运

发布时间: 2012-01-18 00:23:26 作者: rapoo

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))

读书人网 >VC/MFC

热点推荐