正文

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”和#includeafxres.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光标文件,默认IDIDC_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, //自我寄语,自己添加StringTableCaption即为显示内容

        IDS_INDICATOR_ME, //我的信息自己添加StringTableCaption即为显示内容          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;

 

   我要像星光一样直朝前,永不回头。 

阅读(4300) | 评论(0)


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

评论

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