WM_PAINT的有关问题,如何会产生这个消息的循环?
WM_PAINT的问题,怎么会产生这个消息的循环??
下面这段代码是要让一些球在窗体上跳来跳去。在WM_PAINT的处理中,仅仅是改变了每个球的位置,也就是说要不断地产生WM_PAINT消息并处理它,才能实现。问题是,在代码中我并没有不断的产生WM_PAINT消息阿,那么是什么函数隐式的完成了这个消息的循环?代码大致如下:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
//create some pens to use for drawing
static HPEN BluePen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
static HPEN OldPen = NULL;
//create a solid brush
static HBRUSH RedBrush = CreateSolidBrush(RGB(255, 0, 0));
static HBRUSH OldBrush = NULL;
//these hold the dimensions of the client window area
static int cxClient, cyClient;
//create some balls
static SBall* balls = new SBall[NUM_BALLS];
switch (msg)
{
case WM_CREATE:
{这里是初始化的一些操作; }
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint (hwnd, &ps);
OldPen = (HPEN)SelectObject(ps.hdc, BluePen);
OldBrush = (HBRUSH)SelectObject(ps.hdc, RedBrush);
for (int i=0; i <NUM_BALLS; ++i)
{
if ( (balls[i].posX > = cxClient) || (balls[i].posX <0))
下面这段代码是要让一些球在窗体上跳来跳去。在WM_PAINT的处理中,仅仅是改变了每个球的位置,也就是说要不断地产生WM_PAINT消息并处理它,才能实现。问题是,在代码中我并没有不断的产生WM_PAINT消息阿,那么是什么函数隐式的完成了这个消息的循环?代码大致如下:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
//create some pens to use for drawing
static HPEN BluePen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
static HPEN OldPen = NULL;
//create a solid brush
static HBRUSH RedBrush = CreateSolidBrush(RGB(255, 0, 0));
static HBRUSH OldBrush = NULL;
//these hold the dimensions of the client window area
static int cxClient, cyClient;
//create some balls
static SBall* balls = new SBall[NUM_BALLS];
switch (msg)
{
case WM_CREATE:
{这里是初始化的一些操作; }
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint (hwnd, &ps);
OldPen = (HPEN)SelectObject(ps.hdc, BluePen);
OldBrush = (HBRUSH)SelectObject(ps.hdc, RedBrush);
for (int i=0; i <NUM_BALLS; ++i)
{
if ( (balls[i].posX > = cxClient) || (balls[i].posX <0))