開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 プロジェクト |
プロジェクト名 |
Compute |
アプリケーションの種類 |
Windows アプリケーション |
追加のオプション |
空のプロジェクト |
文字セット |
Unicode |
Sleepの引数を1から100にするとかなり反応が悪くなる。
Sleepの次のifをwhileに変更するとレスポンスが改善する。
//
Sleep(100);
while (PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
Compute.c
#include <Windows.h>
#include <CommCtrl.h>
#include "resource.h"
// 関数プロトタイプ宣言
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnStart(HWND hDlg);
// 外部変数
int g_nTimer;
int g_nCount = 0;
enum { nMaxCount = 1000 };
//==============================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc);
return 0;
}
//------------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
INT_PTR nRet = TRUE;
switch (uMsg) {
case WM_TIMER:
{
HWND hWnd = GetDlgItem(hDlg, IDC_PROGRESS);
SendMessage(hWnd, PBM_SETPOS, g_nCount * 100 / nMaxCount, 0);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_START:
OnStart(hDlg);
break;
case IDCANCEL:
if (g_nCount == 0) {
EndDialog(hDlg, IDCANCEL);
} else {
g_nCount = nMaxCount;
}
break;
}
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
default:
nRet = FALSE;
}
return nRet;
}
//------------------------------------------------------------------------------
void OnStart(HWND hDlg)
{
MSG message;
g_nTimer = SetTimer(hDlg, 1, 100, NULL); // 100ms
EnableWindow(GetDlgItem(hDlg, IDC_START), FALSE);
for (g_nCount = 0; g_nCount < nMaxCount; g_nCount++) {
Sleep(1);
if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
}
EndDialog(hDlg, IDOK);
}
resource.h
#define IDD_MAIN 100
#define IDC_START 1000
#define IDC_PROGRESS 1001
Compute.rc
// resource script
#include <windows.h>
#include "resource.h"
IDD_MAIN DIALOGEX 100, 100, 320, 200
STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION "Compute"
FONT 9, "MS Pゴシック"
BEGIN
DEFPUSHBUTTON "Start",IDC_START,260,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,260,23,50,14
CONTROL "",IDC_PROGRESS,"msctls_progress32",
WS_BORDER,40,120,240,14
END
最終更新:2012年10月14日 19:45