win32动态生成窗体菜单

#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;       
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值