更新时间:2015-12-26 18:35:00浏览次数:1+次
然而,你想过没有,其实我们可以不用计时器就可以实现动态提示的效果哦。我们可以仔细来分析这个计时器的作用的本质以及动态提示的本质。这是我们实现的效果图:
InvalidateRect(hwnd,NULL,TRUE);//产生WM_PAINT消息
来产生消息,维持持续的驱动。而后一种方法就不需要这个来维持了。我们一直都没有让无效区域变得有效,所以从窗口第一次显示系统自动产生一个WM_PAINT开始,就会一直持续下去。当然我们改变窗口的大小也会产生这个消息。#include "windows.h"
#include <tchar.h>
// - 项目是Unicode字符集
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
TCHAR Info[100]=_T("【C++技术网http://www.cjjjs.com】");
PAINTSTRUCT ps;
switch (message)
{
case WM_PAINT:
{
#define COUNT 9
static int iCount=0;
static TCHAR Dot[COUNT][10]={_T("."),_T(".."),_T("..."),_T("...."),_T("....."),_T("......"),_T("......."),_T("........"),_T("........")};
//static TCHAR Dot[COUNT][10]={_T("-"),_T("/"),_T("|"),_T("\\")};
//static TCHAR Dot[COUNT][10]={_T("╱"),_T("┊"),_T("╲"),_T("┈")};
//static TCHAR Dot[COUNT][10]={_T("①"),_T("②"),_T("③"),_T("④"),_T("⑤"),_T("⑥")};
//static TCHAR Dot[COUNT][10]={_T("┹"),_T("┩"),_T("┱"),_T("┢")};
//static TCHAR Dot[COUNT][10]={_T("卍"),_T("卐")};
//空闲扫面
HDC hdc = GetDC(hwnd);//利用无效区域和WM_PAINT的关系特点
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
TCHAR Tip[100]=_T("");
wsprintf(Tip,_T("正在扫描病毒%s"),Dot[iCount++%COUNT]);
TextOut(hdc,10,20,Tip,lstrlen(Tip));
InvalidateRect(hwnd,NULL,TRUE);//不停地产生WM_PAINT消息(第一种方法)和(让客户区擦除背景,第一第二钟方法都要用)
Sleep(250);//延时显示动态的效果,两种方法都要用
ReleaseDC(hwnd,hdc);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrev,LPSTR lpCmd,int iShow)
{
TCHAR ClassName[] = _T("MyClass");
TCHAR title1[] = _T("C++技术网http://www.cjjjs.com");
WNDCLASS wndClass;
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = WinProc;
wndClass.lpszClassName = ClassName;
wndClass.lpszMenuName=NULL;
wndClass.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wndClass)) return 0;
HWND hwnd = CreateWindow(ClassName,title1,WS_OVERLAPPEDWINDOW,0,0,600,500,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
MSG msg;
while (TRUE)
{
if(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
相关资讯