Win32 API について。
Posted: 2010年5月01日(土) 21:04
WindowsアプリケーションをWin32 APIとC++で作っているのですが、
自分の力では解決できないエラーが起きて困っています。
よろしくおねがいします。
以下ソースコード。
[game_window.h]
#ifndef GAME_WINDOW
#define GAME_WINDOW
#include <windows.h>
#include <tchar.h>
class Edit_window
{
protected:
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
virtual LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp )=0;
};
class Map_Edit:public Edit_window
{
public:
void initialize_wc(HINSTANCE hInst);
int start(HINSTANCE hInst);
int update();
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
};
#endif
[game_window.cpp]
#include "game_window.h"
int Map_Edit::start(HINSTANCE hInst)
{
initialize_wc(hInst);
// ウィンドウクラスを登録する
if( RegisterClassEx( &wc ) == 0 )
{
return NULL;
}
hWnd = CreateWindow(
wc.lpszClassName, // ウィンドウクラス名
_T("Sample Program"), // タイトルバーに表示する文字列
WS_OVERLAPPEDWINDOW, // ウィンドウの種類
CW_USEDEFAULT, // ウィンドウを表示する位置(X座標)
CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標)
CW_USEDEFAULT, // ウィンドウの幅
CW_USEDEFAULT, // ウィンドウの高さ
NULL, // 親ウィンドウのウィンドウハンドル
NULL, // メニューハンドル
hInst, // インスタンスハンドル
NULL // その他の作成データ
);
if( hWnd == NULL )
{
MessageBox( NULL, _T("ウィンドウの作成に失敗しました"), _T("エラー"), MB_OK );
return 1;
}
// ウィンドウを表示する
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Map_Edit::initialize_wc(HINSTANCE hInst)
{
// ウィンドウクラスの情報を設定
wc.cbSize = sizeof(wc); // 構造体サイズ
wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル
wc.lpfnWndProc = &Map_Edit::WndProc; // ウィンドウプロシージャ
wc.cbClsExtra = 0; // 拡張情報1
wc.cbWndExtra = 0; // 拡張情報2
wc.hInstance = hInst; // インスタンスハンドル
wc.hIcon = (HICON)LoadImage( // アイコン
NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hIconSm = wc.hIcon; // 子アイコン
wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル
NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
wc.lpszMenuName = NULL; // メニュー名
wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名
}
int Map_Edit::update()
{
while(1){
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
if( ret == 0 || ret == -1 )
{
break;
}
else
{
// メッセージを処理する
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
}
LRESULT CALLBACK Map_Edit::WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch( msg )
{
case WM_DESTROY: // ウィンドウを破棄するとき
PostQuitMessage( 0 );
return 0;
}
// 他のメッセージは、デフォルトの処理を行う
return DefWindowProc( hWnd, msg, wp, lp );
}
[起きるエラー]
コンパイルしています...
game_windows.cpp
.\game_windows.cpp(41) : error C2440: '=' : 'LRESULT (__stdcall Map_Edit::* )(HWND,UINT,WPARAM,LPARAM)' から 'WNDPROC' に変換できません。
この変換が可能なコンテキストはありません。
自分の力では解決できないエラーが起きて困っています。
よろしくおねがいします。
以下ソースコード。
[game_window.h]
#ifndef GAME_WINDOW
#define GAME_WINDOW
#include <windows.h>
#include <tchar.h>
class Edit_window
{
protected:
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
virtual LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp )=0;
};
class Map_Edit:public Edit_window
{
public:
void initialize_wc(HINSTANCE hInst);
int start(HINSTANCE hInst);
int update();
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
};
#endif
[game_window.cpp]
#include "game_window.h"
int Map_Edit::start(HINSTANCE hInst)
{
initialize_wc(hInst);
// ウィンドウクラスを登録する
if( RegisterClassEx( &wc ) == 0 )
{
return NULL;
}
hWnd = CreateWindow(
wc.lpszClassName, // ウィンドウクラス名
_T("Sample Program"), // タイトルバーに表示する文字列
WS_OVERLAPPEDWINDOW, // ウィンドウの種類
CW_USEDEFAULT, // ウィンドウを表示する位置(X座標)
CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標)
CW_USEDEFAULT, // ウィンドウの幅
CW_USEDEFAULT, // ウィンドウの高さ
NULL, // 親ウィンドウのウィンドウハンドル
NULL, // メニューハンドル
hInst, // インスタンスハンドル
NULL // その他の作成データ
);
if( hWnd == NULL )
{
MessageBox( NULL, _T("ウィンドウの作成に失敗しました"), _T("エラー"), MB_OK );
return 1;
}
// ウィンドウを表示する
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Map_Edit::initialize_wc(HINSTANCE hInst)
{
// ウィンドウクラスの情報を設定
wc.cbSize = sizeof(wc); // 構造体サイズ
wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル
wc.lpfnWndProc = &Map_Edit::WndProc; // ウィンドウプロシージャ
wc.cbClsExtra = 0; // 拡張情報1
wc.cbWndExtra = 0; // 拡張情報2
wc.hInstance = hInst; // インスタンスハンドル
wc.hIcon = (HICON)LoadImage( // アイコン
NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hIconSm = wc.hIcon; // 子アイコン
wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル
NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
wc.lpszMenuName = NULL; // メニュー名
wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名
}
int Map_Edit::update()
{
while(1){
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
if( ret == 0 || ret == -1 )
{
break;
}
else
{
// メッセージを処理する
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
}
LRESULT CALLBACK Map_Edit::WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch( msg )
{
case WM_DESTROY: // ウィンドウを破棄するとき
PostQuitMessage( 0 );
return 0;
}
// 他のメッセージは、デフォルトの処理を行う
return DefWindowProc( hWnd, msg, wp, lp );
}
[起きるエラー]
コンパイルしています...
game_windows.cpp
.\game_windows.cpp(41) : error C2440: '=' : 'LRESULT (__stdcall Map_Edit::* )(HWND,UINT,WPARAM,LPARAM)' から 'WNDPROC' に変換できません。
この変換が可能なコンテキストはありません。