本例融合了添加菜单、光标、图标资源及状态栏显示时间。 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; 我要像星光一样直朝前,永不回头。

评论