windows编程中3个程序模块不知道如何编写
小弟学习中,在书上有这样3个模块,可是不知道该如何编写,还请大家帮忙解决一下。
程序中共有3个模块:
1。源程序
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <菜单示例.h>
HMENU hmenu,hprintmenu;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hwnd;
MSG Msg;
HACCEL hAccel;
WNDCLASS wndclass;
char lpszMenuName[] = "Menu ";
char lpszClassName[] = "菜单 ";
char lpszTitle[] = "菜单示例 ";
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = lpszClassName;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return 0;
}
hwnd = CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
hAccel = LoadAccelerators(hInstance,lpszMenuName);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
{
if(!TranslateAccelerator(hwnd,hAccel,&Msg))
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_NEW:
break;
case IDM_OPEN:
break;
case IDM_SAVE:
break;
case IDM_SAVEAS:
break;
case IDM_CLOSE:
break;
case IDM_ADDPRINTMENU:
hmenu = GetMenu(hwnd);
hprintmenu = CreateMenu();
AppendMenu(hprintmenu,MF_GRAYED,IDM_LINE, "线条 ");
AppendMenu(hprintmenu,MF_GRAYED,IDM_RECT, "矩形 ");
AppendMenu(hprintmenu,MF_GRAYED,IDM_RRECT, "圆角矩形 ");
AppendMenu(hprintmenu,MF_GRAYED,IDM_ELLIP, "椭圆 ");
InsertMenu(hmenu,2,MF_POPUP|
MF_BYPOSITION,(UINT)hprintmenu, "绘图(&P) ");
EnableMenuItem(hmenu,IDM_ADDPRINTMENU,MF_GRAYED);
EnableMenuItem(hmenu,IDM_DELPRINTMENU,MF_ENABLED);
DrawMenuBar(hwnd);
break;
case IDM_DELPRINTMENU:
DeleteMenu(hmenu,2,MF_BYPOSITION);
EnableMenuItem(hmenu,IDM_ADDPRINTMENU,MF_ENABLED);
EnableMenuItem(hmenu,IDM_DELPRINTMENU,MF_GRAYED);
DrawMenuBar(hwnd);
case IDM_EXIT:
SendMessage(hwnd,WM_DESTROY,0,0);
break;
case IDM_CUT:
break;
case IDM_COPY:
break;
case IDM_PASTE:
break;
case IDM_DELETE:
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
2。菜单示例.h
#define IDM_NEW 10
#define IDM_OPEN 11
#define IDM_CLOSE 12
#define IDM_SAVE 13
#define IDM_SAVEAS 14
#define IDM_ADDPRINTMENU 15
#define IDM_DELPRINTMENU 16
#define IDM_EXIT 17
#define IDM_CUT 18
#define IDM_COPY 19
#define IDM_PASTE 20
#define IDM_DELETE 21
#define IDM_HELP 22
#define IDM_LINE 23
#define IDM_RECT 24
#define IDM_RRECT 25
#define IDM_ELLIP 26
3。菜单示例.rc
#include <windows.h>
#include <菜单示例.h>
Menu MENU
{
POPUP "文件(&F) ";
/*{
MENUITEM "新建(&N) \t Ctrl+N ",IDM_NEW
MENUITEM "打开(&O) \t Ctrl+O ",IDM_CLOSE
MENUITEM "关闭(&C) ",IDM_CLOSE
MENUITEM SEPARATOR
MENUITEM "保存(&S) \t Ctrl+S ",IDM_SAVE
MENUITEM "另存为(&A) ",IDM_SAVEAS
MENUITEM SEPARATOR
MENUITEM "创建绘图菜单项(&P) \t Ctrl+P ",IDM_ADDPRINTMENU
MENUITEM "删除绘图菜单项(&D) \t Ctrl+D ",IDM_DELPRINTMENU,GRAYED
MENUITEM SEPARATOR
MENUITEM "退出(&X) ",IDM_EXIT
}*/
POPUP "编辑(&E) "
/*{
MENUITEM "剪贴(&T) \t Ctrl+T ",IDM_CUT
MENUITEM "复制(&C) \t Ctrl+C ",IDM_COPY
MENUITEM "粘贴(&P) \t Ctrl+P ",IDM_PASTE
MENUITEM "删除(&D) \t Del ",IDM_DELETE
}*/
MENUITEM "帮助(&H) ";
}
Menu ACCELERATORS
{
"^N ",IDM_NEW
"^O ",IDM_OPEN
"^S ",IDM_SAVE
"^P ",IDM_ADDPRINTMENU
"^D ",IDM_DELPRINTMENU
"^X ",IDM_CUT
"^C ",IDM_COPY
"^V ",IDM_PASTE
VK_DELETE,IDM_DELETE,VIRTKEY
}
[解决办法]
第三个是rc文件,你可以手工书写这个文件然后加入工程中,也可以用微软的vc添加资源自动生成这个文件。