MFC怎样在状态栏上显示星期几

时间:2022-05-26 16:05:22
各位达人:我想在状态栏上显示出星期几,应该怎么写?望赐教!谢谢

15 个解决方案

#1


GetCurrentTime

#2


谢谢 已解决!但是不知道是不是还有比我这个代码更简洁的:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  ...
  CTime time;
  struct tm *osTime;
  time=CTime::GetCurrentTime();
  osTime=time.GetLocalTm(NULL);
  m_strWeek.Format("星期%2d",osTime->tm_wday);
  m_wndStatusBar.SetPaneText(2,m_strWeek);
  ...
}

#3


SYSTEMTIME SystemTime;
GetSystemTime(&SystemTime);
cout<<SystemTime.wDayOfWeek<<endl;-------输出即是星期几

#4


都简单,只是开放环境不一样吧

#5


你的已经很简洁了

#6


用这个SYSTEMTIME ,直接就有星期几的

#7


谢谢 已解决!但是不知道是不是还有比我这个代码更简洁的: 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

  ... 
  CTime time; 
  struct tm *osTime; 
  time=CTime::GetCurrentTime(); 
  osTime=time.GetLocalTm(NULL); 
  m_strWeek.Format("星期%2d",osTime->tm_wday); 
  m_wndStatusBar.SetPaneText(2,m_strWeek); 
  ... 

===========================================================
上面写的貌似很正点!

#8


晕,是楼主写的哦,哈哈。

#9


过来学习,呵呵。。。。

#10


学习了。。。。。

#11


lyh09(楼主)的方法不错,但是有一个bug

如果你在一天的23:59分打开,过了一分钟以后已经过了一天了。星期数也就改变了。 但是你的状态栏显示还是没有改变吧。

我告诉你我的做法

1.新建字符型资源 ID_INDICATOR_WEEK 文本为 "星期八" // 文本是什么无所谓关键是要三个字来占位置

2.创建状态栏,为了简单起见,我省却了创建判断状态栏创建成败的检查,如果失败的话,
OnCreate(...)应该返回-1
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    // 这是一个数组
    static UINT indicators[] =
    {
ID_SEPARATOR,
ID_INDICATOR_WEEK
    };

    m_wndStatusBar.Create(this);
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)));


3.添加消息映射
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_UPDATE_COMMAND_UI(ID_INDICATOR_WEEK, &CMainFrame::OnUpdateWeek)
END_MESSAGE_MAP()

4.添加消息响应函数
class CMainFrame : public CFrameWnd
{
public:
    void OnUpdateWeek(CCmdUI *pCmdUI);
    // ...  其他你自己函数啥的
};

void CMainFrame::OnUpdateWeek(CCmdUI *pCmdUI)
{
    CTime tm = CTime::GetTickCount();

    int nWeek = tm.GetDayOfWeek();

    switch(nWeek)
    {
       case 1:   // 查看MSDN可以知道1表示的星期天而不是星期一
           pCmdUI->SetText(_T("星期天"));
           return;
       case 2:
           pCmdUI->SetText(_T("星期一"));
           return;
       //case 3:  // 其他请自己类推
    }
}

5.为什么呢?void CMainFrame::OnUpdateWeek(CCmdUI *pCmdUI)函数是在系统有空闲的时候
只要你程序的主窗口消息队列里没有消息的时候,OnUpdateWeek函数就会被调用。这样,你的状态栏显示的东西,就随时能刷新了。

6. 参考资料
《MFC Windows 程序设计》(第二版) [美]Jeff Prosise Page.644

#12


.

#13


SYSTEMTIME SystemTime; 
GetSystemTime(&SystemTime); 

switch(SystemTime.wDayOfWeek)
{
case 0:
MessageBox(_T("星期日"));
break;
case 1:
MessageBox(_T("星期1"));
break;
case 2:
MessageBox(_T("星期2"));
break;
case 3:
MessageBox(_T("星期3"));
break;
case 4:
MessageBox(_T("星期4"));
break;
case 5:
MessageBox(_T("星期5"));
break;
case 6:
MessageBox(_T("星期6"));
break;
default:
break;
}

#14


补充一点, 你的主窗口的.cpp 文件中,要

#include "resource.h"


否则 编译器将 找不到ID_INDICATOR_WEEK标识符而编译错误

#15


ding....

#1


GetCurrentTime

#2


谢谢 已解决!但是不知道是不是还有比我这个代码更简洁的:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  ...
  CTime time;
  struct tm *osTime;
  time=CTime::GetCurrentTime();
  osTime=time.GetLocalTm(NULL);
  m_strWeek.Format("星期%2d",osTime->tm_wday);
  m_wndStatusBar.SetPaneText(2,m_strWeek);
  ...
}

#3


SYSTEMTIME SystemTime;
GetSystemTime(&SystemTime);
cout<<SystemTime.wDayOfWeek<<endl;-------输出即是星期几

#4


都简单,只是开放环境不一样吧

#5


你的已经很简洁了

#6


用这个SYSTEMTIME ,直接就有星期几的

#7


谢谢 已解决!但是不知道是不是还有比我这个代码更简洁的: 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

  ... 
  CTime time; 
  struct tm *osTime; 
  time=CTime::GetCurrentTime(); 
  osTime=time.GetLocalTm(NULL); 
  m_strWeek.Format("星期%2d",osTime->tm_wday); 
  m_wndStatusBar.SetPaneText(2,m_strWeek); 
  ... 

===========================================================
上面写的貌似很正点!

#8


晕,是楼主写的哦,哈哈。

#9


过来学习,呵呵。。。。

#10


学习了。。。。。

#11


lyh09(楼主)的方法不错,但是有一个bug

如果你在一天的23:59分打开,过了一分钟以后已经过了一天了。星期数也就改变了。 但是你的状态栏显示还是没有改变吧。

我告诉你我的做法

1.新建字符型资源 ID_INDICATOR_WEEK 文本为 "星期八" // 文本是什么无所谓关键是要三个字来占位置

2.创建状态栏,为了简单起见,我省却了创建判断状态栏创建成败的检查,如果失败的话,
OnCreate(...)应该返回-1
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    // 这是一个数组
    static UINT indicators[] =
    {
ID_SEPARATOR,
ID_INDICATOR_WEEK
    };

    m_wndStatusBar.Create(this);
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)));


3.添加消息映射
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_UPDATE_COMMAND_UI(ID_INDICATOR_WEEK, &CMainFrame::OnUpdateWeek)
END_MESSAGE_MAP()

4.添加消息响应函数
class CMainFrame : public CFrameWnd
{
public:
    void OnUpdateWeek(CCmdUI *pCmdUI);
    // ...  其他你自己函数啥的
};

void CMainFrame::OnUpdateWeek(CCmdUI *pCmdUI)
{
    CTime tm = CTime::GetTickCount();

    int nWeek = tm.GetDayOfWeek();

    switch(nWeek)
    {
       case 1:   // 查看MSDN可以知道1表示的星期天而不是星期一
           pCmdUI->SetText(_T("星期天"));
           return;
       case 2:
           pCmdUI->SetText(_T("星期一"));
           return;
       //case 3:  // 其他请自己类推
    }
}

5.为什么呢?void CMainFrame::OnUpdateWeek(CCmdUI *pCmdUI)函数是在系统有空闲的时候
只要你程序的主窗口消息队列里没有消息的时候,OnUpdateWeek函数就会被调用。这样,你的状态栏显示的东西,就随时能刷新了。

6. 参考资料
《MFC Windows 程序设计》(第二版) [美]Jeff Prosise Page.644

#12


.

#13


SYSTEMTIME SystemTime; 
GetSystemTime(&SystemTime); 

switch(SystemTime.wDayOfWeek)
{
case 0:
MessageBox(_T("星期日"));
break;
case 1:
MessageBox(_T("星期1"));
break;
case 2:
MessageBox(_T("星期2"));
break;
case 3:
MessageBox(_T("星期3"));
break;
case 4:
MessageBox(_T("星期4"));
break;
case 5:
MessageBox(_T("星期5"));
break;
case 6:
MessageBox(_T("星期6"));
break;
default:
break;
}

#14


补充一点, 你的主窗口的.cpp 文件中,要

#include "resource.h"


否则 编译器将 找不到ID_INDICATOR_WEEK标识符而编译错误

#15


ding....