mfc编程怎么可以在状态栏时时显示系统时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc编程怎么可以在状态栏时时显示系统时间相关的知识,希望对你有一定的参考价值。

在MFC框架下,单文档和多文档编程默认有状态栏(对话框需要自己创建状态栏),在文档视图程序中显示时间,需要在框架窗口(CMainFrame)下处理,具体步骤如下:

    在状态栏中增加显示时间的区块:首先到ResourceView中编辑String Table,增加IDS_TIMER(时间),然后在CMainFrame中修改indicators数组,插入IDS_TIMER,插入的位置,即为显示的位置。(添加字符串必须将字符串说明也写上,不然无法新建);

    在CMainFrame的OnCreate函数末尾添加SetTimer(1,1000,NULL); 语句;

    在CMainFrame中增加WM_TIMER消息响应函数OnTimer,并在该定时器函数中增加如下代码:

CTime t=CTime::GetCurrentTime();          //获得当前的系统时间
CString str=t.Format("%H:%M:%S");       //格式可以参考MSDN中的strftime函数
int index==m_wndStatusBar.CommandToIndex(IDS_TIMER);
//此处也可以直接输入IDS_TIMER在indicators数组中从0开始的序号。
m_wndStatusBar.SetPaneText(index,str);

状态栏显示宽度默认为IDS_TIMER字符串的宽度,如果需要动态设置,可以使用SetPaneInfo函数。

在对话框程序中,因为对话框没有默认状态栏,需要手动创建一个,其它代码大致思路相同,都是在定时器中获取时间、格式化为字符串,并将字符串设置为状态栏文本。创建状态栏大致代码如下:

HWND Statu;//在对话框类头文件中,设置为类成员变量
//以下代码在OnInitDialog中
statu = CreateStatusWindow(WS_CHILD|WS_VISIBLE,"显示系统时间",this->m_hWnd,IDI_ICON_LOGO);

参考技术A //初始化里,
SetTimer(1,1000,NULL); //定时器

//定时器消息响应
void CLittleCheaterDlg::OnTimer(UINT nIDEvent)

CTime Time;

Time=Time.GetCurrentTime();
m_StatusBar.SetPaneText(0,Time.Format(_T("%y/%m/%d/%w %H:%M:%S")));

CDialog::OnTimer(nIDEvent);
参考技术B 显示系统时间,需要实时获取并更新时间到界面上。一般的思路是使用一个定时器。处理函数里面获取系统时间,并且显示到状态栏。定时器的时间根据你对时间的精度来设置。 参考技术C 弄个timer啊,隔一秒就刷新下。 参考技术D 你所指的状态栏我不知道是哪里
时间转字符串如下
CTime t1 = CTime::GetCurrentTime();
t1.Format("%Y-%m-%d %H:%M:%S");本回答被提问者采纳

MFC怎么改掉窗体标题栏?

就是那条在Xp下是蓝色的条。比如一些音乐播放器,加载皮肤后漂亮多了。怎么加载?
我MFC菜鸟一个。至少给我一些提示去找。比如说,我应该看哪方面的知识(说说标题等。)如果搜索,应该找哪些关键字)。如果用的什么函数之类的,也大致说说名字。具体实现可以先不说。

自绘,贴图,导入位图。如果只想一般的话在右键属性就可以改。加载皮肤,不是一下子能说清楚的。我有个播放器的源代码,有加载皮肤的,可以参考学学。有兴趣就HI我。 参考技术A 这个好像在资源视图中的窗体右键中的属性中可以改的,如果还不清楚可以看看孙鑫的vc视频,讲的不错 参考技术B 单文档里面在这里修改:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;

cs.cx=860;
cs.cy=600;
cs.style &= ~(FWS_ADDTOTITLE|WS_MAXIMIZEBOX|WS_THICKFRAME);
cs.lpszName="你的标题";

return TRUE;


对话框可以直接在属性里面修改。
参考技术C 这个还不简单,定义个变量来控制切换不就行了。
比如定义个变量
BOOL m_bCanDrag ; 默认设定为FALSE;

OnClickButton1()

m_bCanDrag;

然后
OnNcHitTest( CPoint point)

UINT nHitTest = CDialog :: OnNcHitTest(point) ;

if ( m_bCanDrag)

return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest ;


return nHitTest;
参考技术D 你可以通过自绘,贴图来实现,具体方法可以参考一下相关书籍,这不是一两句话可以阐述清楚的。 第5个回答  2010-12-04 那需要图片才能做到漂亮的界面! MFC就是框架编程,每个框架都可以Load图片,所以不难 第6个回答  2010-12-04 可以通过自绘

以上是关于mfc编程怎么可以在状态栏时时显示系统时间的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在MFC Toolbar里添加一个按钮,并且写好了这个按钮的消息处理函数,运行的时候还是没有显示出来?

Vuetify 小吃吧超时时更新父状态

MFC RibbonBar - 以编程方式最小化?

MFC技巧一:单文档中将系统菜单栏替换为自己建立的菜单栏(转)

MFC中的CTime类该怎么用

MFC怎么改掉窗体标题栏?