#include "windows.h"
#define ID_FILE_EXIT 9001 //定义菜单的id号
#define ID_STUFF_GO 9002
CONST char g_szClassName[]="myWindowsClass"; //定义窗口类的名称数组
LRESULT CALLBACK WndProc(HWND hwnd ,UINT msg,WPARAM wParam,LPARAM lParam) //消息处理程序
{
switch(msg) //判断消息的类型
{
case WM_CREATE: //程序新建时发生的消息
{
HMENU hMenu,hSubMenu; //定义菜单和子菜单变理
HICON hIcon,hIconSm; //定义大图标和图标变量
hMenu=CreateMenu(); //新建菜单
hSubMenu=CreatePopupMenu(); //新键子菜单
AppendMenu(hSubMenu,MF_STRING,ID_FILE_EXIT,"E&xit"); //将子菜单追加到窗体
AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)hSubMenu,"&File");//将主菜单追加到窗体
hSubMenu=CreatePopupMenu();
AppendMenu(hSubMenu,MF_STRING,ID_STUFF_GO,"&Go");
AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)hSubMenu,"&Stuff");
SetMenu(hwnd,hMenu); //将菜单设置到那个窗口上
hIcon=(HICON)LoadImage(NULL,TEXT("金色光驱桌面图标.ico"),IMAGE_ICON,32,32,LR_LOADFROMFILE);//装入文件型大图标
if(hIcon)
{
SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon) ;
}
else
{
MessageBox(hwnd,TEXT("没有装入图标"),"error",MB_OK|MB_ICONERROR);
}
hIconSm=(HICON)LoadImage(NULL,"金色光驱桌面图标.ico",IMAGE_ICON,16,16,LR_LOADFROMFILE);//装入文件型小图标
if(hIconSm)
{
SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIconSm);
}
else
MessageBox(hwnd,"Could not load small icon!","Error",MB_OK|MB_ICONERROR);
}
break;
case WM_LBUTTONDOWN: //右建单击窗体时发生的消息
{
TCHAR szFilename[MAX_PATH];
HINSTANCE hInstance=GetModuleHandle(NULL); //得到应用程序的句柄
GetModuleFileName(hInstance,szFilename,MAX_PATH); //得到 应用程序的路径
MessageBox(hwnd,szFilename,TEXT("提示信息"),MB_OK|MB_ICONQUESTION);
}
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) //WIN32入口
{
WNDCLASSEX wc; //窗口类结构体变量
HWND hwnd; //句柄 变量
MSG Msg; //消息结构体
wc.cbSize=sizeof(WNDCLASSEX); //窗口类占用多不字节
wc.style=0; //窗口样式
wc.lpfnWndProc=WndProc; //窗口指向的消息处理程序
wc.cbClsExtra=0; //扩展占用
wc.cbWndExtra=0; //扩展占用
wc.hInstance = hInstance; // 初始化应用程序句柄。
wc.hIcon=NULL; // 初始化图标
wc.hCursor=LoadCursor(NULL,IDC_ARROW); //初始化光标
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); // 窗口背景
wc.lpszMenuName=NULL; //窗口要引用的菜单
wc.lpszClassName=g_szClassName; //引用窗口类的名称
wc.hIconSm=NULL;
//wc.hIconSm=(HICON)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_MYICON),IMAGE_ICON,16,16,0);
if(!RegisterClassEx(&wc)) //向windows注册窗口类
{
MessageBox(NULL,"WINDOWS REG ERROR","ERROR!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd =CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"the tite of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
240,
120,
NULL,
NULL,
hInstance,NULL
); //新键窗口,并将新建的窗口句柄初始化给应用程序
if (hwnd==NULL)
{
MessageBox(NULL,"window creation error","error",MB_ICONERROR|MB_OK);
return 0;
}
ShowWindow(hwnd,nCmdShow); //显示窗口
UpdateWindow(hwnd); //更新窗口
while(GetMessage(&Msg,NULL,0,0)>0) //获取消息
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
win32动态生成窗体菜单
最新推荐文章于 2020-08-31 19:04:35 发布