WM_KEYDOWNのラグについて
Posted: 2016年3月20日(日) 05:53
環境 :vs community 2015
ボタンを押し続ける必要のある処理でWM_KEYDOWNをつかってるのですが、
ボタンを押してから、次の実行までのタイムラグが500ミリ秒ほどあります。
directx以外の対処ほうはありますでしょうか?
ボタンを押し続ける必要のある処理で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);
}