API编程 && 创建菜单资源 ?????

tellf 2005-04-18 10:58:42

新建了一个Win32 Application工程,成功加入了.h和.cpp文件。

问题是:需创建菜单资源(自己用代码实现的),可不知如何加入.rc文件???

仔细读了关键字为"资源"的文章http://community.csdn.net/Expert/Forum.asp
还是没能解决问题。

望前辈给个清晰的步骤,就是step1,step2,...的那种。

谢:)
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tellf 2005-05-02
  • 打赏
  • 举报
回复
下面是源码:
///////////////////
// 5_1.h
//
#define IDM_NEW 10
#define IDM_SAVE 11
#define IDM_SAVEAS 12
#define IDM_EXIT 13
#define IDM_SUM 14
#define IDM_DEVIA 15
#define IDM_STDDEVIA 16
#define IDM_SUMHELP 17
#define IDM_DEVIAHELP 18
#define IDM_STDDEVIAHELP 19
#define IDM_ABOUT 20

///////////////////////////
// 5_1.rc 用记事本编辑后加入Resource Files
//
#include <windows.h>
#include "5_1.h"

Menu MENU DISCARDABLE
{
POPUP "文件(&F)"
{
MENUITEM "打开(&O)", IDM_NEW
MENUITEM "保存(&S)", IDM_SAVE
MENUITEM "另存为(&A)", IDM_SAVEAS
MENUITEM SEPARATOR
MENUITEM "退出(&E)", IDM_EXIT
}
POPUP "计算(&S)"
{
MENUITEM "计算总和(&S)", IDM_SUM
MENUITEM "计算方差(&D)", IDM_DEVIA
MENUITEM "计算均方差(&T)", IDM_STDDEVIA
}
POPUP "帮助(&H)"
{
MENUITEM "计算总和帮助(&S)", IDM_SUMHELP
MENUITEM "计算方差帮助(&D)", IDM_DEVIAHELP
MENUITEM "计算均方差帮助(&T)", IDM_STDDEVIAHELP
MENUITEM SEPARATOR
MENUITEM "关于(&A)", IDM_ABOUT
}
}

//////////////////////////////
// 5_1.cpp
//
#include <windows.h>
#include "5_1.h"
#include <stdlib.h>
#include <string.h>

long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);
HWND hWndMain;

int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG Message;

if (! InitWindowsClass(hInstance))
return FALSE;
if (! InitWindows(hInstance, nCmdShow))
return FALSE;
while (GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}

return Message.wParam;
}

long WINAPI WndProc( HWND hWnd,
UINT iMessage,
UINT wParam,
LONG lParam)
{
switch (iMessage) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

return 0;
}

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hWnd = CreateWindow(
"5_1",
"菜单显示实例程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL
);
if (! hWnd)
return FALSE;
hWndMain = hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS WndClass;

WndClass.style = 0;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = "5_1";
WndClass.lpszMenuName = "Menu";

return RegisterClass(&WndClass);
}
tellf 2005-05-02
  • 打赏
  • 举报
回复
我用的是 黄维通 编的教材《Visual C++程序设计》,
问题源于书上的例子.

后来我直接用添加资源的方式添加“菜单资源”(操作过程:添加->资源(Ctrl+R)),
编辑好菜单资源后,编译通过,也生成了exe文件,可是运行没有结果,不知是何原因???
tellf 2005-05-02
  • 打赏
  • 举报
回复
to ShiGang(Sucess):
可以具体些吗?谢:)
ShiGang 2005-05-02
  • 打赏
  • 举报
回复
用CreateMenu和InsertMenu也行啊.
mark72 2005-04-19
  • 打赏
  • 举报
回复
在resource.h中定义一个菜单ID.然后在你程序名.rc文件中(直接用notepad可以编辑),添加如下代码:
菜单ID MUNU DISCARDABLE
BEGIN
popup "popup menu name"
begin
menuitem "text",MENUITEM_ID1
menuitem "text",MENUITEM_ID2
............
end
popup "popup menu name"
begin
menuitem "text",MENUITEM_ID3
menuitem "text",MENUITEM_ID4 // must be defined in the resource.h
............
end
.......................
END
然后调用api::LoadMenu(HINSTANCE hInstance, lpMenuName )获得menu的句柄,
在precreatewindow中把这个句柄传递给其中的hmenu参数,这样你就可以自己使用不需要资源编辑器制作的menu了。建议你在menu的id该成系统默认的id,这样你就可以不用重载precreatewindow函数了。
over.
菜牛 2005-04-19
  • 打赏
  • 举报
回复
新建文件里选择资源文件就可以了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧