Win32程序中如何添加菜单?
2009-08-05 11:24
281 查看
我想问各位高手一个问题,现在我创建了一个win32 Application的程序并编写了主窗口的代码,然后想在我显示的主窗口中添加一个菜单,怎么加也显示不了,是什么原因啊?已经困惑我好几天了。谢谢指教!!!
(我先用insert/resource/Menu/new创建了一个新的菜单,然后在主程序中添加代码)
#include <windows.h>
#include <string.h>
#include"Simpwin.h"
#include"resource.h" //菜单资源的头文件
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"WinMainCRTStartup/"" )
HINSTANCE hInst;
HWND hWndMain;
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if(!InitApplicaion(hInstance))
return (FALSE);
if(!InitInstance(hInstance,nCmdShow))
return FALSE;
while(GetMessage(
&msg,
NULL,
0,
0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL InitApplicaion(HINSTANCE hInstance)//当前实例句柄
{
WNDCLASS wcSimpwin;
wcSimpwin.style = CS_HREDRAW | CS_VREDRAW;
wcSimpwin.lpfnWndProc = (WNDPROC)MainWndProc;
wcSimpwin.cbClsExtra = 0;
wcSimpwin.cbWndExtra = 0;
wcSimpwin.hInstance = hInstance;
wcSimpwin.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcSimpwin.hCursor = LoadCursor(NULL, IDC_ARROW);
wcSimpwin.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcSimpwin.lpszMenuName = "IDR_MENU1";
wcSimpwin.lpszClassName = "SimpwinWClass";
return RegisterClass(&wcSimpwin);
}
//保存实例句柄,并创建主窗口
BOOL InitInstance(
HINSTANCE hInstance,
int nCmdShow)
{
hInst = hInstance;
HMENU hMenu; //菜单句柄
hMenu=LoadMenu(hInstance,(LPCSTR)IDR_MENU1); //在resource.h中有:#define IDR_MENU1 101
hWndMain = CreateWindow(
"SimpwinWClass",
"我得窗口",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hMenu,
hInstance,
NULL);
if(!hWndMain)
return FALSE;
ShowWindow(hWndMain, nCmdShow);
UpdateWindow(hWndMain);
return TRUE;
}
//处理主窗口消息
LRESULT CALLBACK MainWndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
TextOut(hdc, 20, 10, hello, lstrlen(hello));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
红色的代码就是我为了显示菜单而添加的代码,为什么添加了这些代码还是无法显示我插入的菜单呢?是不是哪里漏了什么了啊?
我用的就是VC6.0么。
不过谢谢各位指点!我总算解决了,原来只要从Project/Add To Project/Files中把我的资源Script4.rc加载一下就能显示菜单了。
(我先用insert/resource/Menu/new创建了一个新的菜单,然后在主程序中添加代码)
#include <windows.h>
#include <string.h>
#include"Simpwin.h"
#include"resource.h" //菜单资源的头文件
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"WinMainCRTStartup/"" )
HINSTANCE hInst;
HWND hWndMain;
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if(!InitApplicaion(hInstance))
return (FALSE);
if(!InitInstance(hInstance,nCmdShow))
return FALSE;
while(GetMessage(
&msg,
NULL,
0,
0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL InitApplicaion(HINSTANCE hInstance)//当前实例句柄
{
WNDCLASS wcSimpwin;
wcSimpwin.style = CS_HREDRAW | CS_VREDRAW;
wcSimpwin.lpfnWndProc = (WNDPROC)MainWndProc;
wcSimpwin.cbClsExtra = 0;
wcSimpwin.cbWndExtra = 0;
wcSimpwin.hInstance = hInstance;
wcSimpwin.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcSimpwin.hCursor = LoadCursor(NULL, IDC_ARROW);
wcSimpwin.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcSimpwin.lpszMenuName = "IDR_MENU1";
wcSimpwin.lpszClassName = "SimpwinWClass";
return RegisterClass(&wcSimpwin);
}
//保存实例句柄,并创建主窗口
BOOL InitInstance(
HINSTANCE hInstance,
int nCmdShow)
{
hInst = hInstance;
HMENU hMenu; //菜单句柄
hMenu=LoadMenu(hInstance,(LPCSTR)IDR_MENU1); //在resource.h中有:#define IDR_MENU1 101
hWndMain = CreateWindow(
"SimpwinWClass",
"我得窗口",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hMenu,
hInstance,
NULL);
if(!hWndMain)
return FALSE;
ShowWindow(hWndMain, nCmdShow);
UpdateWindow(hWndMain);
return TRUE;
}
//处理主窗口消息
LRESULT CALLBACK MainWndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
TextOut(hdc, 20, 10, hello, lstrlen(hello));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
红色的代码就是我为了显示菜单而添加的代码,为什么添加了这些代码还是无法显示我插入的菜单呢?是不是哪里漏了什么了啊?
我用的就是VC6.0么。
不过谢谢各位指点!我总算解决了,原来只要从Project/Add To Project/Files中把我的资源Script4.rc加载一下就能显示菜单了。
相关文章推荐
- [VC++]如何在win32程序中加入右击菜单并添加响应
- 如何利用IDL程序自动添加ENVI菜单
- 如何在基于Dialog的程序中添加menu菜单 ?
- 解决Win32 SDK编程添加list control控件程序无法运行的问题 . 和如何画进度条
- 如何在一个基于对话框的程序中添加 Menu 菜单
- Win7系统如何在桌面右键菜单里添加自定义程序或网址?
- 如何添加程序到windows的鼠标右键菜单,
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- 如何在Smartphone的Win32程序中使用Windows的通用菜单资源(MENU而不是SHMENUBAR)
- win8开始屏幕中如何添加常用的程序图标
- 定时器SetTimer如何用在win32控制台用用程序中
- 在win32程序中添加工具栏状态栏
- SWT如何给Table添加右键菜单
- c语言中如何添加计时函数,统计程序执行的时间
- .net如何使用Cache框架给程序添加Cache
- 如何在C#添加鼠标右键菜单
- MFC如何添加菜单快捷键
- [symbian]如何实现程序在应用程序菜单中隐藏
- 如何删去Fedora下应用程序菜单中的多余程序启动器?
- 如何在Win32窗口程序中发命令打开一个控制台,往里面打印(printf())输出一些数据