WM_KEYDOWNのラグについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
神崎

WM_KEYDOWNのラグについて

#1

投稿記事 by 神崎 » 9年前

環境 :vs community 2015
ボタンを押し続ける必要のある処理でWM_KEYDOWNをつかってるのですが、
ボタンを押してから、次の実行までのタイムラグが500ミリ秒ほどあります。
directx以外の対処ほうはありますでしょうか?

コード:

 
#include "windows.h"
#include "stdio.h"

// プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

// エントリポイント
int WINAPI WinMain(
	HINSTANCE hInstance,// 現在のインスタンスのハンドル
	HINSTANCE hPrevInstance,// 以前のインスタンスのハンドル
	LPSTR lpCmdLine,// コマンドライン
	int nCmdShow)// 表示状態
{
	WNDCLASSEX wcex;//ウィンドウクラスの構造体
	HWND hWnd;	// ウインドウハンドル
	MSG msg;	// メッセージ構造体


	// ウィンドウクラスの構造体
	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = (WNDPROC)WndProc;
	wcex.cbClsExtra = 0;
	wcex.cbWndExtra = 0;
	wcex.hInstance = hInstance;
	wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = "TestApp";
	wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

	// ウィンドウの登録
	RegisterClassEx(&wcex);

	// ウィンドウを作成
	hWnd = CreateWindowEx(
		WS_EX_TOOLWINDOW,      // 拡張ウィンドウスタイル
		wcex.lpszClassName,  // 登録されているクラス名
		TEXT("Testウィンドウ名"), // ウィンドウ名
		WS_OVERLAPPEDWINDOW,        // ウィンドウスタイル
		CW_USEDEFAULT,                // ウィンドウの横方向の位置
		CW_USEDEFAULT,                // ウィンドウの縦方向の位置
		480,           // ウィンドウの幅
		360,          // ウィンドウの高さ
		NULL,      // 親ウィンドウまたはオーナーウィンドウのハンドル
		NULL,          // メニューハンドルまたは子ウィンドウ ID
		hInstance,  // アプリケーションインスタンスのハンドル
		NULL        // ウィンドウ作成データ
		);

	// ウィンドウを表示する
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);

	// メッセージループ
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	// 戻り値を返します。
	return msg.wParam;
}
int fps = 0;

// ウインドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
	WPARAM wParam, LPARAM lParam)
{
	HDC			hdc;
	PAINTSTRUCT ps;
	
	// FPSメッセージ格納用(テスト)
	char str[20];

	// メッセージの種類に応じて処理を分岐します。
	switch (message)
	{
	case WM_DESTROY:
		// ウインドウが破棄されたときの処理
		PostQuitMessage(0);
		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		
		// FPSの測定結果表示
		sprintf_s(str, sizeof(str), "FPS : %d", fps);
		TextOut(hdc, 350, 0, str, strlen(str));

		EndPaint(hWnd, &ps);

		break;

	case WM_KEYDOWN:
		//FPS
		fps = fps + 1;
		InvalidateRect(hWnd, NULL, TRUE);
		break;
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

神崎

Re: WM_KEYDOWNのラグについて

#2

投稿記事 by 神崎 » 9年前

すいません。解決しました。

閉鎖

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