はじめまして。
フック関数がうまく使えません。フック関数を使った、以下のソースコードをコンパイルするとエラー
『1 番目の引数を 'WNDPROC (__cdecl *)(HWND,UINT,WPARAM,LPARAM)' から 'WNDPROC' に変換できません。』
が発生します。
また、引数"HookWinMessage"を無理やり"WNDPROC"にキャストして、実行すると『ハンドルされていない例外』が
出て上手く動きません。
分かる方がいらっしゃるなら、ご教示願います。
//----------WinBase.h----------//
#ifndef _WINBASE_H_
#define _WINBASE_H_
#include <DxLib.h>
class WinBase{
protected:
static WNDPROC HookWinMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
public:
WinBase(bool window_mode);
~WinBase();
};
#endif
//----------WinBase.cpp----------//
#include "WinBase.h"
WinBase::WinBase(bool window_mode){ //コンストラクタ
ChangeWindowMode(window_mode);
DxLib_Init()
SetHookWinProc(HookWinMessage); //←ココでプロシージャ登録
}
WinBase::~WinBase(){ //デストラクタ
DxLib_End();
}
WNDPROC WinBase::HookWinMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_KEYDOWN: //Escキーで終了
if(wParam == VK_ESCAPE) DestroyWindow(hWnd);
break;
case WM_DESTROY: //ウインドウが破棄された
PostQuitMessage(0);
break;
}
return 0;
}
//----------WinMain.cpp----------//
#include "WinBase.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow ){
WinBase *Win = new WinBase(true);
DrawPixel(320, 240 ,0xffff); // 点を打つ
WaitKey(); // キー入力待ち
delete Win;
return 0 ;
}