キー押下による変換について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ちー
記事: 13
登録日時: 13年前

キー押下による変換について

#1

投稿記事 by ちー » 13年前

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);
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: キー押下による変換について

#2

投稿記事 by softya(ソフト屋) » 13年前

読みづらいのでcodeタグをご利用下さい。 → http://dixq.net/board/board.html

まず、ENTERキーを処理する方法です。
「Win32API(C言語)編 第25章 キーボードの入力を処理する」
http://www.geocities.jp/ky_webid/win32c/025.html

あと描画処理はWM_PAINTメッセージの処理として書いて下さい。他の所に書いてはダメです。

それと、赤い丸からグレーの丸へはスイッチを切り替えるように一瞬で変われば良いのでしょうか?
であればENTERキーでどっちを表示するかのフラグを切り替えてInvalidateRect()で再描画させるれば良いと思います。
「InvalidateRect」
http://www.geocities.jp/ky_webid/win32c/014.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ちー
記事: 13
登録日時: 13年前

Re: キー押下による変換について

#3

投稿記事 by ちー » 13年前

ありがとうございました.
少し時間がかかってしまいましたが解決できました.

codeの件すみませんでした.以後気をつけます!

閉鎖

“C言語何でも質問掲示板” へ戻る