如何显示从CControlBar类派生的自定义控件类的对象?大家来看看
我写了一个从CControlBar派生的类(CRulerBar),作用是显示一个标尺。然后把这个类的两个对象放在CChildFrame类中,并且在CChildFrame::OnCreate()中创建了这两个标尺对象(调用CreateRulerBar()函数,代码在下面),但是无法显示出来。
已经确认对象能正确创建(构造函数和CreateRulerBar中都没有异常),同时调用到了CalcFixedLayout()函数,但是DoPaint()和OnEraseBkgnd()函数虽然也已经实现,却没有被调用,即使发重画消息给标尺也无法被调用,不知道为什么不行。
所以非常想知道正常流程下CRulerBar如何被显示,显示代码如何被调用。
创建CRulerBar对象的代码如下:
bool CRulerBar::CreateRulerBar(CWnd*parent1,int height1,//尺子的宽度,象素单位);
int bigMarkLen1,int smallMarkLen1)//大、小刻度线的长度,象素单位
{
parent=parent1;
if(bigMarkLen1!=-1)bigMarkLen=bigMarkLen1;
if(smallMarkLen1!=-1)smallMarkLen=smallMarkLen1;
height=height1;
DWORD dwStyle;
if(layout==HORIZ) //horizonal
{
dwStyle=CBRS_TOP;
}
else //vertical
{
dwStyle=CBRS_LEFT;
}
dwStyle |= WS_CHILD;
dwStyle |= CBRS_SIZE_FIXED;
dwStyle |= WS_CLIPSIBLINGS;
dwStyle|=WS_VISIBLE;
int wid,hei,left,top;
if(layout==VERTI)
{
left=0;
top=height;
wid=height;
hei= getLength();//计算本标尺可见部分的象素长度
}
else if(layout==HORIZ)
{
top=0;
left=height;
wid=this->getLength();
hei=height;
}
else return false;//left,top,wid+left,hei+top
if(!Create(NULL,NULL,dwStyle,CRect(0,0,0,0),parent,ID_VIEW_RULER_BAR))
{
TRACE0("Failed to create ruler\n");
return FALSE; // fail to create
}
// m_dwStyle = (UINT)dwStyle;
if(layout==HORIZ) //horizonal
{
SetBarStyle(CBRS_ALIGN_TOP);
}
else if(layout==VERTI) //vertical
{
SetBarStyle(CBRS_ALIGN_LEFT);
}
else return false;
int HEIGHT=height;
hfont.CreateFont(-HEIGHT/2, 0, 0, 0, FW_NORMAL, 0, 0, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, VARIABLE_PITCH|FF_SWISS, NULL);
vfont.CreateFont(-HEIGHT/2, 0, 900, 900, FW_NORMAL, 0, 0, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, VARIABLE_PITCH|FF_SWISS, NULL);
return true;
}//craeate ruler bar