|
|
发表于 2008-4-1 12:55:00
|
显示全部楼层
Re:求助:关于VC++里面的消息映射
/********************************************************************
created: 2008/03/31
created: 31:3:2008 13:34
filename: k:\备份\开发资源\解决方案\LoserPower\WaitableTimer\WaitableTimer.cpp
file path: k:\备份\开发资源\解决方案\LoserPower\WaitableTimer
file base: WaitableTimer
file ext: cpp
author: Loserwang
purpose:
*********************************************************************/
#define _WIN32_WINNT 0x0501
#include ".\\..\\LoserPower\\losHeaders.h"
#include "resource.h"
using namespace los::types;
using namespace los::stringtypes;
using namespace los::framework;
using namespace los::controls;
using namespace los::mathtools;
using namespace los::multithreading;
using namespace los::systeminformation;
HANDLE hWait;
class WaitThread : public Thread<Window>
{
public:
InheritClass(WaitThread);
virtual ulong Run(pointer pWnd)
{
bExit = false;
while (!bExit)
{
::WaitForSingleObject(hWait, INFINITE);
DateTime dt;
app->GetWindow(pWnd->GetDlgItem(IDC_EDIT7))->text = dt.ToString();
}
return 0;
}
bool bExit;
};
class WTDialog : public Dialog
{
public:
InheritClass(WTDialog);
WTDialog()
: Dialog(IDD_DIALOG1)
, edt1(IDC_EDIT1)
, edt2(IDC_EDIT2)
, edt3(IDC_EDIT3)
, edt4(IDC_EDIT4)
, edt5(IDC_EDIT5)
, edt6(IDC_EDIT6)
, edt7(IDC_EDIT7)
, btn1(IDC_BUTTON1)
, btnOk(IDOK)
{}
protected:
virtual void MessageMap()
{
Base::MessageMap();
Invoke(wm_initdialog, OnInitDialog);
Invoke(btn1.clicked(), OnBtn1);
Invoke(btnOk.clicked(), OnOk);
}
private:
LRESULT OnInitDialog(Window& def_focus, void* data)
{
CenterWindow();
los::controls::Color clr;
InitControls(this, &edt1, &edt2, &edt3, &edt4, &edt5, &edt6, &edt6, &edt7, &btn1, &btnOk, 0);
edt5.text = t("Y-M-D h:m:s");
edt6.text = t("Y年M月D日 h时m分s秒");
DateTime dt(DateTime::dtUTC);
hWait = CreateWaitableTimer(0, false, t("6436E6AE-8207-4c92-B532-5FC6EE8EF4F9"));
SetWaitableTimer(hWait, &dt.ToLargeInteger(), 1000, 0, 0, false);
thrd.param_ptr = this;
thrd.CreateThread();
return Base: roc();
}
LRESULT OnBtn1()
{
if (edt1.text == t(""))
{
MessageBox(t("请输入日期/时间字符串"));
return 0;
}
DateTime dt(edt1.text, DateTime::dtLocal, edt5.text);
edt2.text = dt.ToString(edt6.text);
stringstream ss;
ss << dt.ToInt64();
edt3.text = ss.str();
ss.str(t(""));
dt.ConvertToUTC();
edt4.text = dt.ToString(edt6.text);
return 0;
}
LRESULT OnOk()
{
::CloseHandle(hWait);
Close(idOk);
return 0;
}
private:
Edit edt1, edt2, edt3, edt4, edt5, edt6, edt7;
Button btn1, btnOk;
WaitThread thrd;
};
INT WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, INT)
{
WTDialog* pDlg = new WTDialog;
pDlg->Create(0);
pDlg->ShowWindow();
pDlg->UpdateWindow();
app->Initialize(pDlg);
return app->Run(0);
}
|
|