高级会员

- 积分
- 782
- 金钱
- 782
- 注册时间
- 2012-8-29
- 在线时间
- 17 小时
|

楼主 |
发表于 2014-2-26 10:06:09
|
显示全部楼层
回复【4楼】guooay耀:
---------------------------------
谢谢LS,我的问题基本解决了。 WM_SetBkWindowColor()这个函数是清背景桌面的, 在WM.H文件中被定义了#define WM_SetBkWindowColor(Color) WM_SetDesktopColor(Color)。
主要是对重绘概念不明确,重绘应该是把整个窗口都清除的意思,颜色设为背景色,所以需要用Clear清除,如果希望背景中的某一部分不被清除,需要将该部分定义成另一个窗口。
贴一下代码,我是用回调函数实现的,不用也可以。
WM_HWIN ID[10]={0,0,0,0,0,0,0,0,0,0};
static void cbChild(WM_MESSAGE* pMsg) {
int x, y;
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
GUI_SetColor(GUI_RED);
break;
default:
WM_DefaultProc(pMsg);
}
}
nt main(void)
{
u16 i=0;
SystemInit(); //STM32?????±???è?? system_stm32f10x.c???ü??
delay_init(72);
PORT_Init();
GUI_Init();
GUI_SetBkColor(GUI_BLUE );
GUI_SetColor(GUI_RED);
GUI_Clear(); //默认的窗口是背景窗口
// ID[0]=WM_HBKWIN;
ID[0]=WM_CreateWindow(20,10,200,300,WM_CF_SHOW,&cbChild,0);//以背景窗口为父窗口建立一个子窗口
ID[1]=WM_CreateWindowAsChild(0,0,95,145,ID[0],WM_CF_SHOW,NULL,0); //共用一个
ID[2]=WM_CreateWindowAsChild(0,155,95,145,ID[0],WM_CF_SHOW,NULL,0);
ID[3]=WM_CreateWindowAsChild(105,0,95,95,ID[0],WM_CF_SHOW,NULL,0);
ID[4]=WM_CreateWindowAsChild(105,105,95,95,ID[0],WM_CF_SHOW,NULL,0);
ID[5]=WM_CreateWindowAsChild(105,205,95,95,ID[0],WM_CF_SHOW,NULL,0);
ID[6]=WM_CreateWindowAsChild(0,0,95,95,ID[0],WM_CF_SHOW,NULL,0); //在1窗口的位置建立了6窗口,是同胞的关系, 后面1窗口隐藏了但是6号窗口仍然存在。
WM_SelectWindow(ID[0]); //这个不是背景窗口,是背景窗口的一个子窗口,下面的6个窗口都是该窗口的子窗口
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_GREEN);
GUI_Clear();
for(i=1;i<=6;i++)
{
WM_SelectWindow(ID);
GUI_SetBkColor(GUI_RED);
GUI_SetColor(GUI_WHITE);
GUI_Clear();
}
WM_SelectWindow(ID[6]);
GUI_DispStringAt(" osition 50,20",40,0);
WM_HideWindow(ID[1]); //隐藏了1 但是6仍然在
WM_HideWindow(ID[5]); //隐藏
WM_Exec(); //刷屏
while(1);
}
说的不对的地方 大神指正啊!! |
|