帮忙看看这个TIMER1为什么没有用呢?同样的代码在RBUTTONDOWN中有效果。注:点击菜单SVAE来SetTimer
#include <windows.h>
#include <stdio.h>
#include "resource.h"
#define TIMER1 2000
BOOL InitApplication(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
static int iNumber=0;
HMENU hMenu;
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if (!hPrevInstance)
if (!InitApplication(hInstance))
return (FALSE);
hMenu=LoadMenu(hInstance,"MyMenu");
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage (&msg);
}
return (msg.wParam);
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
char a[]="MyMenu";
char b[]="MyWindow";
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
wc.lpszMenuName = a;
wc.lpszClassName = b;
return (RegisterClass(&wc));
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow("MyWindow",
"SDK for test!",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hMenu,
hInstance,
NULL);
if (hWnd == NULL)
return (FALSE);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return (TRUE);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
char sPrint[10]="";
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
// KillTimer(hWnd,TIMER1);
break;
case WM_TIMER:
iNumber++;
sprintf(sPrint,"%d",iNumber);
hDC=GetDC(hWnd);
TextOut(hDC,100,100,sPrint,2);
ReleaseDC(hWnd,hDC);
break;
case WM_PAINT:
break;
case WM_LBUTTONDOWN:
break;
case WM_RBUTTONDOWN:
iNumber++;
sprintf(sPrint,"%d",iNumber);
hDC=GetDC(hWnd);
TextOut(hDC,100,100,sPrint,2);
ReleaseDC(hWnd,hDC);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_QUIT:
PostQuitMessage(0);
break;
case IDM_OPEN:
break;
case IDM_SAVE:
SetTimer(hWnd, TIMER1, 1000, (TIMERPROC)NULL);
break;
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
谢了:)
应该在WM_PAINT上处理重绘。
把return 0的地方
改成
return DefWindowProc(hWnd, message, wParam, lParam);
你其他的消息不用处理了啊
:)