カウントダウンタイマー
Posted: 2012年6月09日(土) 00:51
初めまして、zeroと申します。
よろしくお願いします。
カウントダウンタイマーに関する記事を検索したのですが
ほしい情報が載っていませんでした。
それでトピを立てました。
OSはwindows7 64bit
言語はwin32api
使ってるソフトはMicrosoft Visual Studio 2010
やりたいことは時間を自分で入力してそれをカウント
0になったらタイマーがなるようにしたいです。
(問題の部分)
自分で入力した数字をCreateWindow(TEXT("EDIT"),(TEXT("%c"),str3),の部分に表示させたいのですがうまく表示されません。
あと、ボックス内をクリックして入力をしたりすると開始と停止が勝手に有効と無効に切り替わります。
入力をしても有効と無効が勝手に切り替わらないようにするにはどうしたらいいでしょうか?
わかる方教えていただけませんしょうか?
下記にソース
よろしくお願いします。
カウントダウンタイマーに関する記事を検索したのですが
ほしい情報が載っていませんでした。
それでトピを立てました。
OSはwindows7 64bit
言語はwin32api
使ってるソフトはMicrosoft Visual Studio 2010
やりたいことは時間を自分で入力してそれをカウント
0になったらタイマーがなるようにしたいです。
(問題の部分)
自分で入力した数字をCreateWindow(TEXT("EDIT"),(TEXT("%c"),str3),の部分に表示させたいのですがうまく表示されません。
あと、ボックス内をクリックして入力をしたりすると開始と停止が勝手に有効と無効に切り替わります。
入力をしても有効と無効が勝手に切り替わらないようにするにはどうしたらいいでしょうか?
わかる方教えていただけませんしょうか?
下記にソース
#include <Windows.h>
#define x 150
#define y 180
static HWND kaisi;
static HWND teisi;
HINSTANCE hinstance;
static TCHAR str[128],str2[128],str3[128];
LRESULT CALLBACK wndproc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
SYSTEMTIME stime;
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
SetTimer(hwnd,1,300,NULL);
return 0;
case WM_TIMER:
GetLocalTime(&stime);
wsprintf(str,TEXT("%d年 %d月 %d日\n%d時 %d分 %d秒"),
stime.wYear, stime.wMonth, stime.wDay,
stime.wHour, stime.wMinute, stime.wSecond);
SetWindowText(hwnd,str);
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
GetClientRect(hwnd , &rect);
DrawText(hdc , str , -1, &rect , DT_LEFT);
EndPaint(hwnd , &ps);
return 0;
case WM_COMMAND:
if(LOWORD(wp) == 0) {
if(IsWindowEnabled(kaisi)) EnableWindow(kaisi , FALSE);
else EnableWindow(kaisi , TRUE);
if(IsWindowEnabled(teisi)) EnableWindow(teisi , FALSE);
else EnableWindow(teisi , TRUE);
}
return 0;
case WM_CHAR:
hdc=GetDC(hwnd);
wsprintf(str2,(LPTSTR)&wp);
wsprintf(str3,str2);
ReleaseDC(hwnd,hdc);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hinstance ,HINSTANCE hprevinstance , PSTR lpcmdline , int ncmdshow)
{
HWND hwnd;
MSG msg;
WNDCLASS win;
win.style = CS_HREDRAW | CS_VREDRAW ;
win.lpfnWndProc = wndproc;
win.cbClsExtra =win.cbWndExtra =0;
win.hInstance =hinstance;
win.hIcon =LoadIcon(NULL,IDI_APPLICATION);
win.hCursor =LoadCursor(NULL,IDC_ARROW);
win.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
win.lpszMenuName =NULL;
win.lpszClassName =TEXT("練習");
if(!RegisterClass(&win)) return -1;
hwnd = CreateWindow(TEXT("練習"),TEXT("練習"),
WS_VISIBLE |(WS_OVERLAPPEDWINDOW & ~(/*WS_MINIMIZEBOX|*/WS_MAXIMIZEBOX)),
50,50,
x,y,
NULL,NULL,hinstance,NULL);
kaisi=CreateWindow(TEXT("BUTTON"),TEXT("開始"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED,
0,70,50,30,hwnd,NULL,hinstance,NULL);
teisi=CreateWindow(TEXT("BUTTON"),TEXT("停止"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
55,70,50,30,hwnd,NULL,hinstance,NULL);
CreateWindow(TEXT("EDIT"),(TEXT("%c"),str3),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_BORDER,
0,40,100,30,hwnd,NULL,hinstance,NULL);
if(hwnd == NULL) return -1;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage( &msg );
DispatchMessage(&msg);
}
return msg.wParam;
}