- PR -

VC++60MFC:WM_TIMERをvoid CALLBACK TimerProc()で処理したいのですがthisが使えません!

1
投稿者投稿内容
砂嵐ジバ
常連さん
会議室デビュー日: 2005/12/03
投稿数: 25
投稿日時: 2006-03-09 01:41
グローバル宣言内では
this
MFCクラスメンバ関数
が使えません。エラーになりました。

//グローバル
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,DWORD dwTime)
{
static int Cnt=0;

if(uMsg == WM_TIMER)
if(idEvent == 1)
{
CString msg;
CDC* pdc=GetDC();//@
CClientDC dc(this);//A
msg.Format("%d ",Cnt++);
pdc->TextOut(10,10,msg);
dc.TextOut(10,20,msg);
}
}
@error C2660: 'GetDC' : 関数が不正な 0 個の実引数をともなって呼び出されました
Aerror C2673: 'TimerProc' : グローバル関数にアクセスするための 'this' ポインタがありません
どのように変更すればよろしいのでしょうか?
おねがいします!
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-09 02:21
this は何を指すと思って書いていますか?
グローバル関数では使えませんよね.

GetDC で何のデバイスコンテキストを取りたいのか,CClientDC で何のデバイスコンテキストを取りたいのか,何にテキストを書きたいのか,何をしたいのかよくわかりません.
とりあえず目的のクラスのメンバにしてみてはどうですか?

以前の投稿でも感じたのですが,MFC をやる前に,C++ と Win32API はある程度知識として持っておかないと,MFC は辛いと思います.

_________________
囚人のジレンマな日々
砂嵐ジバ
常連さん
会議室デビュー日: 2005/12/03
投稿数: 25
投稿日時: 2006-03-29 01:38
解決しました!
static メンバを定義して、それにthisポインタを代入して使用するようにしました。
1

スキルアップ/キャリアアップ(JOB@IT)