关于static控件填充背景色的有关问题
关于static控件填充背景色的问题。
创建了一个CStatic类的继承类CCustomStatic用来填充static控件的背景色。
下面这个函数是填充static控件的某一区域背景颜色。
由于希望填充好几个区域的背景色,比如把一个长条的static控件的开头一段与结尾一段都填充成红色。所以iNum这个标识填充区域数量的参数值是不固定的。也因为iNum不固定,所以用来保存区域的rect是CRect的指针m_prcCtrlPartRect,然后根据iNum来new出空间赋值。
问题是,赋值可以成功,但在OnPaint中该如何持续的填充这些背景色?????
------解决方案--------------------
补充:环境 win7+vs10
------解决方案--------------------
vc6上现在的程序没问题。
点击‘搜索’,可以看到3个红条。
------解决方案--------------------
我XP + VS2010
去掉&后,没问题。
楼主VS2005 没装SP1补丁包??
------解决方案--------------------
看了下代码,把这个g_bIsFill声明为CCustomStatic的成员变量就行了
创建了一个CStatic类的继承类CCustomStatic用来填充static控件的背景色。
下面这个函数是填充static控件的某一区域背景颜色。
由于希望填充好几个区域的背景色,比如把一个长条的static控件的开头一段与结尾一段都填充成红色。所以iNum这个标识填充区域数量的参数值是不固定的。也因为iNum不固定,所以用来保存区域的rect是CRect的指针m_prcCtrlPartRect,然后根据iNum来new出空间赋值。
问题是,赋值可以成功,但在OnPaint中该如何持续的填充这些背景色?????
- C/C++ code
public: CRect *m_prcCtrlPartRect; //////////////////////// BOOL g_bIsFill = FALSE; int g_iRectNum = 0; void CCustomStatic::SetBkPartColor(int iNum, ......) { g_iRectNum = iNum; //g_iRectNum是全局变量 m_prcCtrlPartRect = new CRect[iNum]; for (int i = 0; i <= iNum; ++i) {//经过计算给各个Rect逐一赋值 if (i == iNum) {//赋值完毕后退出,激活OnPaint中的填充代码 g_bIsFill = TRUE; return; } m_prcCtrlPartRect[i].left = xxx; m_prcCtrlPartRect[i].top = xxx; m_prcCtrlPartRect[i].right = xxx; m_prcCtrlPartRect[i].bottom = xxx; } Invalidate(); } ////////////////////////////////////////////////////////////////////// //如果这个for循环中没有那个if语句,那么这个for循环会持续执行,直至崩溃。 //但如果有那个if语句,那么for循环只能执行一次,一旦画面刷新,控件填充的背景色就会消失。 //这里有没有让FillSolidRect持续执行而又不崩溃的办法呢???? void CCustomStatic::OnPaint() { CPaintDC dc(this); // device context for painting CClientDC clientDC(this); if (g_bIsFill) { for (int i = 0; i <= g_iRectNum; ++i) { //if (i == g_iRectNum) //{ // delete [] m_prcCtrlPartRect; // m_prcCtrlPartRect = NULL; // g_bIsFill = FALSE; //} clientDC.FillSolidRect(m_prcCtrlPartRect[i], RGB(0,255,255)); //填充背景色 } } }
------解决方案--------------------
补充:环境 win7+vs10
------解决方案--------------------
vc6上现在的程序没问题。
点击‘搜索’,可以看到3个红条。
------解决方案--------------------
我XP + VS2010
去掉&后,没问题。
楼主VS2005 没装SP1补丁包??
------解决方案--------------------
看了下代码,把这个g_bIsFill声明为CCustomStatic的成员变量就行了