如何向DesktopWindow发送WM_PAINT消息?

FlyingHero 2000-08-20 07:37:00
按照MSDN的说明,我使用了如下语句:
::RedrawWindow(NULL, &theRect, NULL, RDW_ERASE and RDW_FRAME and RDW_INVALIDATE);//theRect为重绘的区域
但似乎没有效果。请问高手应该怎么办?
...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
creative 2000-08-22
  • 打赏
  • 举报
回复
把&theRect换成NULL试一下。
dandycheung 2000-08-22
  • 打赏
  • 举报
回复
用InvalidateRect(), UpdateWindow()函数。
Areslee 2000-08-20
  • 打赏
  • 举报
回复
桌面的窗口句柄是0X80,用它作参数一定行
FlyingHero 2000-08-20
  • 打赏
  • 举报
回复
To Creative:
我试过::RedrawWindow(GetDesktopWindow(), &theRect, NULL, RDW_ERASE and RDW_FRAME and RDW_INVALIDATE);但同样没有效果。
creative 2000-08-20
  • 打赏
  • 举报
回复
请用GetDesktopWindow获取桌面的句柄。
tibetty 2000-08-20
  • 打赏
  • 举报
回复
偶认为不要用0x80,而改用GetDesktopWindow取得句柄,NT跟98不一样
用链表实现贪吃蛇#include <windows.h> #include #include #include #include //结构体桩坐标 struct Node { int x; int y; struct Node *pNext; }; typedef struct Node Snake; typedef struct Node Bean; void showSnake(HDC hdc,const Snake *pSnakeHead); Snake* createSnake(int nLength); void snakeRun(Snake *pSnakeHead,int nSnakeDirection); void snakeDead(HWND hwnd,HDC hdc,const Snake *pSnakeHead); Bean* createBean(HWND hwnd,HDC hdc,Bean *pBean,const Snake *pSnakeHead); void showBean(HWND hwnd,HDC hdc,const Bean *pBean,const Snake *pSnakeHead); /* 函数声明 */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* 定义全局变量 */ char szClassName[ ] = "WindowsApp"; /*主函数入口*/ int WINAPI WinMain (HINSTANCE hThisInstance, /*当前实例句柄*/ HINSTANCE hPrevInstance, /*前一个实例句柄*/ LPSTR lpszArgument, /*命令行字符串*/ int nFunsterStil) /*窗口显示方式*/ { HWND hwnd; /* 主窗体句柄 */ MSG messages; /* 主窗体向应用程序发送消息 */ WNDCLASSEX wincl; /* 主窗体的结构 */ /* 填写窗口结构,使得其参数描述主窗口各个方面的属性 */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* 注册回调函数 */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* 使用缺省的图标和鼠标指针样式 */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* 没有注册菜单 */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* windows缺省的背景色 */ wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); /* 对窗口进行注册 */ if (!RegisterClassEx (&wincl)) return 0; /* 创建一个窗口*/ hwnd = CreateWindowEx ( 0, /* 指定窗口的扩展风格 */ szClassName, /* 指定窗体类名 */ "Game", /* 窗口标题*/ WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX, /* 指定创建窗口的风格 */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 608, /* The programs width */ 510, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* 让窗口显示出来 */ ShowWindow (hwnd, nFunsterStil); /* 进入消息循环;当得到的消息是一条WM_OUIT消息时,就退出消息循环 */ while (GetMessage (&messages, NULL, 0, 0)) { /* 把虚拟键消息翻译为字符消息 */ TranslateMessage(&messages); /* 把消息分配到相应的窗口过程中去 */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return (int)messages.wParam; } /* 回调函数,处理主窗口消息 */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; //定义变量 static Bean *pBean = NULL; //蛇的 static Snake *pSnake = NULL; static int snakeLength = 5; static int snakeDirection = 2; switch (message) /* handle the messages */ { case WM_CREATE: pSnake = createSnake(5); break; //显示图形 case WM_PAINT: hdc = BeginPaint(hwnd, &ps); /* 在这里添加画图的代码 */ showSnake(hdc,pSnake); EndPaint(hwnd, &ps); break; case WM_KEYDOWN: switch(wParam) { /*按下Enter*/ case VK_RETURN: //在这里填写代码 if(IDYES==MessageBox(hwnd,"是要开始吗?","提示",MB_YESNO)) { SetTimer(hwnd, 1, 1000, NULL); } break; /* 左箭头 */ case VK_LEFT: //在这里填写代码 snakeDirection = 1; break; /* 右箭头 */ case VK_RIGHT: //在这里填写代码 snakeDirection = 3; break; /* 上箭头 */ case VK_UP: //在这里填写代码 snakeDirection = 2; break; /* 下箭头 */ case VK_DOWN: //在这里填写代码 snakeDirection = 4; break; } break; /*时间事件*/ case WM_TIMER: //在这里填写代码 snakeRun(pSnake,snakeDirection); hdc = GetDC(hwnd); Rectangle(hdc,0,0,600,600); showSnake(hdc,pSnake); snakeDead(hwnd,hdc,pSnake); ReleaseDC(hwnd,hdc); break; case WM_DESTROY: PostQuitMessage (0); /* 向消息队列中发送一个WM_OUIT消息 */ break; default: /* 调用默认窗口过程对未处理的消息进行必要的处理 */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧