如何显示从CControlBar类派生的自定义控件类的对象?大家来看看

david_zhao_wei 高级系统软件工程师  2006-09-19 06:25:44
我写了一个从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
...全文
152 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
菜牛 2006-09-19
你参照向导建立的代码。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2006-09-19 06:25
社区公告

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