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);
...
}
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;-------输出即是星期几
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);
...
}
===========================================================
上面写的貌似很正点!
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
如果你在一天的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;
}
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标识符而编译错误
#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);
...
}
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;-------输出即是星期几
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);
...
}
===========================================================
上面写的貌似很正点!
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
如果你在一天的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;
}
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标识符而编译错误
#include "resource.h"
否则 编译器将 找不到ID_INDICATOR_WEEK标识符而编译错误
#15
ding....