sdk编程,有没有可能用对象来管理SetTimer?比如说我想让一个窗口自己来移动。
class AAA
{
void MoveTo(int, int);
static VOID CALLBACK TimerProc(HWND hCtrl, UINT message,
UINT iTimerID, DWORD dwTime);
};
void AAA::MoveTo(int x, int y)
{
??? SetTimer(wnd.hCtrl, 5, 200, this->TimerProc); ???
}
这个Timerproc里面必须是静态的东西,所以让对象操作好像不适合?若你让子窗口自己移动,除了WM_TIMER,还有什么办法?
class AAA
{
void MoveTo(int, int);
static VOID CALLBACK TimerProc(HWND hCtrl, UINT message,
UINT iTimerID, DWORD dwTime);
};
void AAA::MoveTo(int x, int y)
{
??? SetTimer(wnd.hCtrl, 5, 200, this->TimerProc); ???
}
这个Timerproc里面必须是静态的东西,所以让对象操作好像不适合?若你让子窗口自己移动,除了WM_TIMER,还有什么办法?
解决方案 »
- 用CPictureEx这个类画动态GIF,图片缩小(<100%)的时候颜色显示不正常的问题
- 用bmp贴图画自定义窗口的问题?
- 求vc6读写xml文件的例子
- DDK能不能结合vc.net进行编译啊?
- 请问一下,软件开发分前台和后台的行吗?
- 关于.CHM格式问题。
- 在打印处理时为什么将纸张长度设置为130就可以,设置为100就不行?
- 如何将两个位图Button合并为一个位图Button?
- 我是一个C/C++的开发人员,想学习MFC,需要哪些准备,上手需要多长时间?谢谢!
- 如何给一个结构体中的char[]赋一个CString的值
- unsigned char * 问题 Base64解码
- ADO+ACESS数据库统计时间段2008-9-9到2008-12-12,SQL怎么实现?
怎样在这个对象里面处理WM_TIMER?这样不就完全封装了嘛。
查到要给this指针个什么东西,可是这就必须在这个静态TimerProc里面处理,可是里面必须是静态变量,所以怎么和对象联系呢?
那就只能把ID值变成对象数组的index,也是十分麻烦。
如果不这样,TimerProc有没有其他参数可传,也是郁闷。多谢了。
{
void MoveTo(int, int);
static VOID CALLBACK TimerProc(HWND hCtrl, UINT message,
UINT iTimerID, DWORD dwTime);
protected: //{{AFX_MSG(AAA)
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
void AAA::MoveTo(int x, int y)
{
SetTimer( 5, 200, this->TimerProc ); //如果窗口继承子CWnd 就可以直接使用SetTimer来打开自己类的定时了}
BEGIN_MESSAGE_MAP(AAA, CWnd)
ON_WM_TIMER()
END_MESSAGE_MAP()void AAA::OnTimer(UINT nIDEvent)
{
//在这里写AAA窗口移动的代码
}大体上就是这个样子了
可惜我不会MFC编程,只是用SDK来玩玩。
MFC是C++写的,所以响应SetTimer应该没有太大问题。这个自己定义的窗口类CWnd不知是什么原理,如果用SDK来写个类,不知怎么写成窗口类。
这个this->TimerProc虽然编译没有报错,但毕竟TimerProc是静态成员函数,可否成立?
而且在函数里面写代码,都还得是静态变量,如我上面所说,还是没有解决问题。如果太麻烦,还不如在主窗口响应WM_TIMER消息。
SetTimer(hWnd,1,1000,NULL);
然后 case WS_TIMER: