キー押下による変換について
Posted: 2012年11月13日(火) 19:58
visual C++を学んでいるものです.
メソッドを作ったのですがエンターキーで赤い丸からグレーの丸へ変換するコードがわかりません.
よろしければ教えてください.
以下今のコードです.(↓のように変換したいのですがわかりません)
#include <windows.h>
#include <string.h>
#include "test.h"
#include<stdio.h>
#include<stdlib.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //プロトタイプ宣言
//処理内容:グレーの円を描くためのメソッド(draw_round)
//引数 :x,y,r(X座標,Y座標,半径)
void draw_round(int x ,int y ,int r)
{
HDC hdc;
hdc = GetDC(NULL); // get drawing context
SelectObject(hdc , CreateSolidBrush(RGB(211,211,211)));
Ellipse(hdc , x-r, y-r , x+r , y+r);
DeleteObject(SelectObject(hdc , CreateSolidBrush(RGB(211,211,211))));
ReleaseDC(NULL, hdc); // release context
}
//処理内容:赤い円を描くためのメソッド(draw_round_red)
//引数 :x,y,r(X座標,Y座標,半径)
void draw_round2(int x ,int y ,int r)
{
HDC hdc;
hdc = GetDC(NULL); // get drawing context
SelectObject(hdc , CreateSolidBrush(RGB(255,0,0)));
Ellipse(hdc , x-r, y-r , x+r , y+r);
DeleteObject(SelectObject(hdc , CreateSolidBrush(RGB(255,0,0))));
ReleaseDC(NULL, hdc); // release context
}
void DrawGr(HWND,HDC);
char szClassNme[] = "ウィンドウクラス・ネーム"; //ウィンドウクラスネーム宣言の型宣言
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd; //ウィンドウハンドル
MSG msg; //メッセージ構造体
WNDCLASS myProg; //ウィンドウクラスの構造体
//ウィンドウクラス構造体の各メンバの定義
if (!hPreInst) {
myProg.style =CS_HREDRAW | CS_VREDRAW; //水平方向|垂直方向の定義
myProg.lpfnWndProc =WndProc; //ウィンドウプロシージャの名前の定義
myProg.cbClsExtra =0; //拡張情報なし
myProg.cbWndExtra =0; //拡張情報なし
myProg.hInstance =hInstance; //インスタンスハンドルの定義
myProg.hIcon =NULL; //大きいアイコンなし
myProg.hCursor =LoadCursor(NULL, IDC_ARROW); //マウスカーソルスタイルの定義
myProg.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景を白色にする
myProg.lpszMenuName ="SAMPLE02"; //メニュー名の定義
myProg.lpszClassName =szClassNme; //クラス名の定義
//ウィンドウクラスの登録
if (!RegisterClass(&myProg))
return FALSE;
}
//ウィンドウの作成
hWnd = CreateWindow(szClassNme, //ウィンドクラスネームの作成
"a",
WS_OVERLAPPEDWINDOW, //ウィンドウの種類の定義
CW_USEDEFAULT, //ウィンドウの表示位置(x座標)の定義
CW_USEDEFAULT, //ウィンドウの表示位置(y座標)の定義
CW_USEDEFAULT, //ウィンドウの幅の定義
CW_USEDEFAULT, //ウィンドウの高さの定義
NULL, //親ウィンドウのウィンドウハンドルなし
NULL, //メニューハンドルなし
hInstance, //インスタンスハンドルの定義
NULL); //その他のデータなし
LONG lStyle = GetWindowLong( hWnd, GWL_STYLE );
lStyle &= ( !WS_CAPTION );
SetWindowLong( hWnd, GWL_STYLE, lStyle );
//ウィンドウの表示
ShowWindow(hWnd, SW_MAXIMIZE);
UpdateWindow(hWnd);
//マウスカーソルを隠すための処理
ShowCursor(false); // カーソルを消すための処理
draw_round2(640,512,12); //赤い丸を表示
↓
draw_round(640,512,12); //グレーの丸を表示
while (GetMessage(&msg, NULL, 0, 0)) { //メッセージの取得
TranslateMessage(&msg); //メッセージの処理
DispatchMessage(&msg); // 〃
}
return (msg.wParam);
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (msg) {
case WM_COMMAND: //プッシュボタンが押された時
switch(LOWORD(wParam)) {
case IDM_END: //ヘッダーファイルの値が入力された時
SendMessage(hWnd, WM_CLOSE, 0, 0L); //ウィンドウを閉じる
break;
}
break;
case WM_DESTROY: //ウィンドウが破棄される時
PostQuitMessage(0);
break;
case WM_PAINT: //無効領域がある時
hdc = BeginPaint(hWnd, &ps);
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}
メソッドを作ったのですがエンターキーで赤い丸からグレーの丸へ変換するコードがわかりません.
よろしければ教えてください.
以下今のコードです.(↓のように変換したいのですがわかりません)
#include <windows.h>
#include <string.h>
#include "test.h"
#include<stdio.h>
#include<stdlib.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //プロトタイプ宣言
//処理内容:グレーの円を描くためのメソッド(draw_round)
//引数 :x,y,r(X座標,Y座標,半径)
void draw_round(int x ,int y ,int r)
{
HDC hdc;
hdc = GetDC(NULL); // get drawing context
SelectObject(hdc , CreateSolidBrush(RGB(211,211,211)));
Ellipse(hdc , x-r, y-r , x+r , y+r);
DeleteObject(SelectObject(hdc , CreateSolidBrush(RGB(211,211,211))));
ReleaseDC(NULL, hdc); // release context
}
//処理内容:赤い円を描くためのメソッド(draw_round_red)
//引数 :x,y,r(X座標,Y座標,半径)
void draw_round2(int x ,int y ,int r)
{
HDC hdc;
hdc = GetDC(NULL); // get drawing context
SelectObject(hdc , CreateSolidBrush(RGB(255,0,0)));
Ellipse(hdc , x-r, y-r , x+r , y+r);
DeleteObject(SelectObject(hdc , CreateSolidBrush(RGB(255,0,0))));
ReleaseDC(NULL, hdc); // release context
}
void DrawGr(HWND,HDC);
char szClassNme[] = "ウィンドウクラス・ネーム"; //ウィンドウクラスネーム宣言の型宣言
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd; //ウィンドウハンドル
MSG msg; //メッセージ構造体
WNDCLASS myProg; //ウィンドウクラスの構造体
//ウィンドウクラス構造体の各メンバの定義
if (!hPreInst) {
myProg.style =CS_HREDRAW | CS_VREDRAW; //水平方向|垂直方向の定義
myProg.lpfnWndProc =WndProc; //ウィンドウプロシージャの名前の定義
myProg.cbClsExtra =0; //拡張情報なし
myProg.cbWndExtra =0; //拡張情報なし
myProg.hInstance =hInstance; //インスタンスハンドルの定義
myProg.hIcon =NULL; //大きいアイコンなし
myProg.hCursor =LoadCursor(NULL, IDC_ARROW); //マウスカーソルスタイルの定義
myProg.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景を白色にする
myProg.lpszMenuName ="SAMPLE02"; //メニュー名の定義
myProg.lpszClassName =szClassNme; //クラス名の定義
//ウィンドウクラスの登録
if (!RegisterClass(&myProg))
return FALSE;
}
//ウィンドウの作成
hWnd = CreateWindow(szClassNme, //ウィンドクラスネームの作成
"a",
WS_OVERLAPPEDWINDOW, //ウィンドウの種類の定義
CW_USEDEFAULT, //ウィンドウの表示位置(x座標)の定義
CW_USEDEFAULT, //ウィンドウの表示位置(y座標)の定義
CW_USEDEFAULT, //ウィンドウの幅の定義
CW_USEDEFAULT, //ウィンドウの高さの定義
NULL, //親ウィンドウのウィンドウハンドルなし
NULL, //メニューハンドルなし
hInstance, //インスタンスハンドルの定義
NULL); //その他のデータなし
LONG lStyle = GetWindowLong( hWnd, GWL_STYLE );
lStyle &= ( !WS_CAPTION );
SetWindowLong( hWnd, GWL_STYLE, lStyle );
//ウィンドウの表示
ShowWindow(hWnd, SW_MAXIMIZE);
UpdateWindow(hWnd);
//マウスカーソルを隠すための処理
ShowCursor(false); // カーソルを消すための処理
draw_round2(640,512,12); //赤い丸を表示
↓
draw_round(640,512,12); //グレーの丸を表示
while (GetMessage(&msg, NULL, 0, 0)) { //メッセージの取得
TranslateMessage(&msg); //メッセージの処理
DispatchMessage(&msg); // 〃
}
return (msg.wParam);
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (msg) {
case WM_COMMAND: //プッシュボタンが押された時
switch(LOWORD(wParam)) {
case IDM_END: //ヘッダーファイルの値が入力された時
SendMessage(hWnd, WM_CLOSE, 0, 0L); //ウィンドウを閉じる
break;
}
break;
case WM_DESTROY: //ウィンドウが破棄される時
PostQuitMessage(0);
break;
case WM_PAINT: //無効領域がある時
hdc = BeginPaint(hWnd, &ps);
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}