RT,小弟在做一个单文档的工程,要求根据设置的个数动态创建带有颜色的客户区,并且在每个客户区内动态创建四个按钮。
现在解决了初步的问题,可以动态创建出子窗口,并且可以动态创建出来四个按钮,问题就是,只在第一个子窗口内可以显示,其他的都没有显示。调试了一下午,只能解决到这步了,故求教各位。下面是我的代码: if(bIsDraw == true)
{
delete []m_wndUnit;  //子窗口指针数组
delete []m_btnUnit;  //按钮指针数组
} CRect rect ;
GetClientRect(rect);

int nTop = rect.top;
int nLeft = rect.left + 20;

int nEquipNum = atoi(m_strEquipNum);
int nRight = rect.right/(nEquipNum) - 20;
int nButtom = rect.bottom/(nEquipNum) - 20;
int nTemp = nRight;
int nbtnNum = 0; //按钮计数 m_wndUnit = new CCreateUnit[nEquipNum];   //nEquipNum为外部传入的客户区数量
m_btnUnit = new CButton[nEquipNum * 4];

for(int i = 0; i < nEquipNum; i++)
{
//画子客户区
CRect rectUnit(nLeft, nTop, nRight, nButtom);
DWORD dwStyle  = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE; m_wndUnit[i].Create( "MFCUnitCtrl" , NULL  ,dwStyle , rectUnit , this , NULL ) ;
m_wndUnit[i].ShowWindow( SW_NORMAL ) ; //在每个客户区生成按钮
CRect rectBtn1(nLeft - 20, nTop, nRight/2 - 20, nButtom/2 - 5);
m_btnUnit[nbtnNum].Create("初始化", WS_VISIBLE|BS_PUSHBUTTON, rectBtn1, &m_wndUnit[i], NULL);
m_btnUnit[nbtnNum].ShowWindow( SW_NORMAL ); CRect rectBtn2(nRight/2, nTop, nRight, nButtom/2 - 5);
m_btnUnit[nbtnNum + 1].Create("运行位置", WS_VISIBLE|BS_PUSHBUTTON, rectBtn2, &m_wndUnit[i], NULL);
m_btnUnit[nbtnNum + 1].ShowWindow( SW_NORMAL ); CRect rectBtn3(nLeft - 20, nButtom/2 + 5, nRight/2 - 20, nButtom);
m_btnUnit[nbtnNum + 2].Create("取样位置", WS_VISIBLE|BS_PUSHBUTTON, rectBtn3, &m_wndUnit[i], NULL);
m_btnUnit[nbtnNum + 2].ShowWindow( SW_NORMAL ); CRect rectBtn4(nRight/2, nButtom/2 + 5, nRight, nButtom);
m_btnUnit[nbtnNum + 3].Create("旁路位置", WS_VISIBLE|BS_PUSHBUTTON, rectBtn4, &m_wndUnit[i], NULL);
m_btnUnit[nbtnNum + 3].ShowWindow( SW_NORMAL ); //变量后续处理
nLeft += nTemp + 20;
nRight += nTemp + 20;
nbtnNum += 4;
} bIsDraw = true; RedrawWindow();

解决方案 »

  1.   

    m_btnUnit[i].Create("初始化", WS_VISIBLE|BS_PUSHBUTTON, rectBtn1, &m_wndUnit[i], NULL);
    m_btnUnit[i].ShowWindow( SW_NORMAL );
      

  2.   

    按钮的父窗口是m_wndUnit, 因此它的坐标应该是用m_wndUnit的客户区坐标
      

  3.   

    m_wndUnit有用吗? 四个按钮的父窗口应该是相同的.
      

  4.   

    按钮ID的问题?
    你为你的按钮 分配不同的ID试验下
    为毛打出来的是繁体字
      

  5.   

    我的子客户区的ID都是NULL,都创建成功了,按说不应该是ID的问题,昨天试过了,ID唯一的话也不对
      

  6.   

    试试这样  for(int i = 0; i < nEquipNum; i++)
      {
        //画子客户区
        CRect rectUnit(nLeft, nTop, nRight, nButtom);
        rectUnit.OffsetRect(i * (nTemp + 20), 0)
        DWORD dwStyle = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE;    m_wndUnit[i].Create( "MFCUnitCtrl" , NULL ,dwStyle , rectUnit , this , NULL ) ;
        m_wndUnit[i].ShowWindow( SW_NORMAL ) ;    //在每个客户区生成按钮
        CRect rectBtn1(nLeft - 20, nTop, nRight/2 - 20, nButtom/2 - 5);
        m_btnUnit[nbtnNum].Create("初始化", WS_VISIBLE|BS_PUSHBUTTON, rectBtn1, &m_wndUnit[i], NULL);
        m_btnUnit[nbtnNum].ShowWindow( SW_NORMAL );    CRect rectBtn2(nRight/2, nTop, nRight, nButtom/2 - 5);
        m_btnUnit[nbtnNum + 1].Create("运行位置", WS_VISIBLE|BS_PUSHBUTTON, rectBtn2, &m_wndUnit[i], NULL);
        m_btnUnit[nbtnNum + 1].ShowWindow( SW_NORMAL );    CRect rectBtn3(nLeft - 20, nButtom/2 + 5, nRight/2 - 20, nButtom);
        m_btnUnit[nbtnNum + 2].Create("取样位置", WS_VISIBLE|BS_PUSHBUTTON, rectBtn3, &m_wndUnit[i], NULL);
        m_btnUnit[nbtnNum + 2].ShowWindow( SW_NORMAL );    CRect rectBtn4(nRight/2, nButtom/2 + 5, nRight, nButtom);
        m_btnUnit[nbtnNum + 3].Create("旁路位置", WS_VISIBLE|BS_PUSHBUTTON, rectBtn4, &m_wndUnit[i], NULL);
        m_btnUnit[nbtnNum + 3].ShowWindow( SW_NORMAL );    //变量后续处理
        //nLeft += nTemp + 20;
        //nRight += nTemp + 20;
        nbtnNum += 4;
      }
      

  7.   

     #3楼 得分:0回复于:2012-05-29 09:36:04按钮的父窗口是m_wndUnit, 因此它的坐标应该是用m_wndUnit的客户区坐标