どうしたらいいのでしょう。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
ATOM InitApp(HINSTANCE hInst);
BOOL InitInstance(HINSTANCE hInst, int nCmdShow);
void DrawChessboard(HDC,short,short);
BOOL GetCurPos(short*,short*,LPARAM);
char szClassName[/url] = "WinChess"; //ウィンドウクラス
char *kihu[8][8]={
{"r","p","","","","","P","R"},
{"n","p","","","","","P","N"},
{"b","p","","","","","P","R"},
{"q","p","","","","","P","Q"},
{"k","p","","","","","P","K"},
{"b","p","","","","","P","B"},
{"n","p","","","","","P","N"},
{"r","p","","","","","P","R"}};
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow){
MSG msg;
BOOL bRet;
if (!InitApp(hCurInst))
return FALSE;
if (!InitInstance(hCurInst, nCmdShow))
return FALSE;
while ((bRet=GetMessage(&msg, NULL, 0, 0))!=0) {
if (bRet == -1) {
break;
}
else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
//ウィンドウ・クラスの登録
ATOM InitApp(HINSTANCE hInst){
WNDCLASSEX wc;
wc.cbSize=sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wc.lpfnWndProc=WndProc; //プロシージャ名
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInst;//インスタンス
wc.hIcon=(HICON)LoadImage(NULL,
MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
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=(LPCSTR)szClassName;
wc.hIconSm=NULL;
return (RegisterClassEx(&wc));
}
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst, int nCmdShow){
HWND hWnd;
hWnd=CreateWindow(szClassName,
"Winchess", //タイトルバーにこの名前が表示されます
WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,
50, //X座標
50, //Y座標
450, //幅
450, //高さ
NULL, //親ウィンドウのハンドル、親を作るときはNULL
NULL, //メニューハンドル、クラスメニューを使うときはNULL
hInst, //インスタンスハンドル
NULL);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//座標特定
BOOL GetCurPos(short *x,short *y,LPARAM lp){
POINTS point;
int temp;
point=MAKEPOINTS(lp);
if(point.x<10 || point.x>410 || point.y<10 || point.y>410)return FALSE;
temp=(point.x-10)%50;
temp=point.x-10-temp;
*x=temp/50;
temp=(point.y-10)%50;
temp=point.y-10-temp;
*y=temp/50;
return TRUE;
}
//チェス盤の描画
void DrawChessboard(HDC hdc,short x,short y){
int i,j;
HPEN hBoldPen,hOldPen;
HBRUSH hOldBrush,hNullBrush,hGreenBrush;
HFONT hFont,hOldFont;
//初期化
hBoldPen=CreatePen(PS_SOLID,5,RGB(255,0,0));
hNullBrush=(HBRUSH)GetStockObject(NULL_BRUSH);
hGreenBrush=CreateSolidBrush(RGB(0,140,20));
hOldBrush=(HBRUSH)SelectObject(hdc,hGreenBrush);
hFont=CreateFont(35,0,0,0
,FW_SEMIBOLD
,FALSE,FALSE,FALSE
,SHIFTJIS_CHARSET
,OUT_DEFAULT_PRECIS
,CLIP_DEFAULT_PRECIS
,DEFAULT_QUALITY
,DEFAULT_PITCH | FF_DONTCARE
,"MS ゴシック");
hOldFont=(HFONT)SelectObject(hdc,hFont);
//初期化終了
for(i=0;i<8;i++){
for(j=0;j<8;j++){
if((i+j)%2)SelectObject(hdc,hGreenBrush);
else SelectObject(hdc,hOldBrush);
Rectangle(hdc,10+i*50,10+j*50,60+i*50,60+j*50);
}
}
hOldPen=(HPEN)SelectObject(hdc,hBoldPen);
SelectObject(hdc,hNullBrush);
Rectangle(hdc,10+x*50,10+y*50,60+x*50,60+y*50);
for(i=0;i<8;i++){
for(j=0;j<8;j++){
TextOut(hdc,27+i*50,17+j*50,(LPCTSTR)kihu[j],1);
}
}
//終了処理
SelectObject(hdc,hOldPen);
SelectObject(hdc,hOldBrush);
SelectObject(hdc,hOldFont);
DeleteObject(hFont);
DeleteObject(hGreenBrush);
DeleteObject(hBoldPen);
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
PAINTSTRUCT ps;
HDC hdc;
static POINTS zahyo={0,0};
switch (msg) {
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
DrawChessboard(hdc,zahyo.x,zahyo.y);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDBLCLK:
if(GetCurPos(&zahyo.x,&zahyo.y,lp))
InvalidateRect(hWnd,NULL,TRUE);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}