正文

VS入门之菜单图标光标状态栏2007-10-12 20:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/30043.html

分享到:

本例融合了添加菜单、光标、图标资源及状态栏显示时间。 1文件à新建à项目àwin32àwin32空项目à项目属性à配置属性à常规àMFC的使用à在共享DLL中使用MFC或在静态库中链接MFCà编写first.cpp文件 2在项目文件中添加first.rc文件,在资源视图中选择first.rc节点,再选择编辑à包含文件,在上下两列表框中分别填入#include afxres.h”和#include“afxres.rc”; 3右击资源视图中first.rc节点à添加资源—〉选择Menu|新建à在资源编辑框中编辑FILE|EXIT菜单à单击菜单出现菜单属性菜单编辑器将其EXIT 的ID设置为ID_FILE_EXIT,并在.cpp文件中添加系统默认EXIT退出函数命令; 4右击资源视图中first.rc节点à 添加资源à选择Icon|导入已有的.ico图表文件à在资源视图一次展开Icon 将其ID默认为IDI_ICON1,然后在first.cpp加载IDI_ICON1;本例加载了两个Icon分别为生成的.exe文件图标和主窗口左上角小图标。 5同上导入自己收藏的.cur光标文件,默认ID为IDC_CURSOR1,然后在first.cpp加载IDI_CURSOR1 附程序清单: #include <afxwin.h> // 必要的包涵文件 #include <afxext.h> #include "resource.h" // 主窗口类 class MyFrameWindow : public CFrameWnd { public:     //在窗口被创建之前先执行此函数     BOOL PreCreateWindow(CREATESTRUCT &cs)     {         cs.hMenu=LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU1)); //载入自定义菜单         return CFrameWnd::PreCreateWindow(cs);      }     afx_msg void OnFileExit( )      //响应FILE|EXIT选项     {         PostMessage(WM_CLOSE);     }     afx_msg void OnPaint( )     // 重绘窗口内部图形     {         CPaintDC paintDC( this );         paintDC.TextOut ( 0, 0, "I love U" );//在工作区显示字符串     }     HCURSOR hCursor; //鼠标句柄     CStatusBar statusbar; //状态栏句柄     afx_msg BOOL OnSetCursor(CWnd* pWnd,UINT nmyframe,UINT message);     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);     afx_msg void OnTimer(UINT_PTR nIDEvent);     DECLARE_MESSAGE_MAP() // 声明消息映射表 };   //消息映射表 BEGIN_MESSAGE_MAP(MyFrameWindow, CFrameWnd)     ON_WM_CREATE()     ON_WM_PAINT() // 响应WM_PAINT消息     ON_WM_SETCURSOR()     ON_COMMAND(ID_FILE_EXIT,OnFileExit)     ON_WM_TIMER() END_MESSAGE_MAP() // 设置鼠标光标 BOOL MyFrameWindow::OnSetCursor(CWnd* pWnd,UINT nmyframe,UINT message) {     hCursor=AfxGetApp()->LoadCursor(IDC_CURSOR1);//载自定义光标资源     BOOL apiRet;     apiRet=CFrameWnd::OnSetCursor( pWnd,nmyframe,message);     if((apiRet==FALSE)&&(nmyframe==HTCLIENT))         ::SetCursor(hCursor);     return apiRet;  }   int MyFrameWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) {     // 状态栏的指示栏标志     static UINT indicators[] =     {         IDS_INDICATOR_WORD, //自我寄语,自己添加StringTable,Caption即为显示内容         IDS_INDICATOR_ME, //我的信息自己添加StringTable,Caption即为显示内容          ID_INDICATOR_CAPS, //显示CapsLock状态         ID_INDICATOR_SCRL, //显示ScrollLock状态         ID_INDICATOR_NUM, //显示NumLock状态         ID_INDICATOR_TIME, //时间显示     };     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)  return -1;       // Prepare status bar //     statusbar.Create ( this );     // 设置指示栏//     statusbar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));     // set field width for time display     statusbar.SetPaneInfo(5,ID_INDICATOR_TIME,SBPS_POPOUT,180);     // 调用计时器//     SetTimer ( 5, 1000, 0 );     return 0; }   void MyFrameWindow::OnTimer(UINT_PTR timerId) {     //char time[12];     char time[40];     CFrameWnd::OnTimer(timerId);     if(timerId==5)     {         SYSTEMTIME t;         //获得系统时间         GetLocalTime(&t);         //形成时间字符串         wsprintf(time,"%02d年%02d月%02d日%02d:%02d:%02d 星期%02d",t.wYear,t.wMonth,t.wDay,t.wHour,t.wMinute,t.wSecond,t.wDayOfWeek);         //更新时间显示          statusbar.SetPaneText(statusbar.CommandToIndex(ID_INDICATOR_TIME),time);     } }   // 应用程序类 class HelloApp : public CWinApp { public:       HelloApp ( )          : CWinApp ( (LPCTSTR)"Hello World!")    //设置应用程序名称//     {}     ~HelloApp ( )     {}     BOOL InitInstance( )     {           HICON hIcon;         hIcon=LoadIcon(IDI_ICON1);         CFrameWnd *MyFrame = new MyFrameWindow; //产生主窗口对象//         m_pMainWnd = MyFrame;         MyFrame->Create ( NULL,"水流花开"); // 创建主窗口,第二个参数为窗口标题//         MyFrame->SetIcon(hIcon,FALSE); //设置窗口的小图标,此为框架窗口标题前的图标//         MyFrame->SetIcon(LoadIcon(IDI_ICON2) ,TRUE);//设置窗口的大图标;.exe文件与这里的SetIcon完全无关,自动挑选ID最小的,可在.h里修改ID尝试//         MyFrame->ShowWindow ( SW_SHOW );            // 显示主窗口//         return TRUE;     } } HelloWorld;      我要像星光一样直朝前,永不回头。 

阅读(4548) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册