CDialogBar创建的工具栏上的CListbox题头一般在那里初始化?(弱弱的问)


SDI工程,我创建了一个基于CDialogBar的工具条,用资源管理在上边放置了一个CListBox控件,我想程序运行起来后自动为ListBox设置好题头,应该在那里设置?我直接在CDialogBar类的create事件里面设置出错,跟踪发现是断言错误,好像是句柄不存在(分析是程序没有运行起来,工具条还没建立),哪我该在那里对他进行初始化工作那?
另,我该在那里控制ListBox大小和位置?我想让程序启动后,listbox充满整个工具条

20 个解决方案

#1


onInitialDialog

#2


没有哪个事件,重写里面都没。你说的是那种基于对话框的才有onInitialDialog

#3


MSDN:
Knowledge Base  

HOWTO: How to Initialize Child Controls in a Derived CDialogBar

#4


ON_MESSAGE(WM_INITDIALOG, OnInitDialog)

跟CDialog中的OnInitDialog虚函数不一样,CDialogBar中主动响应WM_INITDIALOG消息,然后在响应函数里初始化控件,但是一定在记得在你自己的响应函数中先调用CDialogBar原先的响应函数。

#5


to Mackz :
那文档是讲如何把Cdialog变成CdialogBar的,我都实现了,我是问在那里初始化CdialogBar上的CListCtrl的标题,位置及大小。没说到点子上

#6


if (!m_dlgBar.Create(this, IDD_DIALOGBAR1,
CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_VIEWSELECT))
{
TRACE0("Failed to create DlgBar\n");
return -1;      // fail to create
}
在后面加上
(CListBox*) pListBox=(CListBox*)m_dlgBar.GetDlgItem(IDC_LISTBOX1);
if(pListBox)
{
在这里操作Listbox就行了
}

#7


也就是说在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里面初始化拉。
我就是想知道是在主CMainFrame里面还是在CDialogBar里面初始化

#8


还一个问题啊:我现在要把LISTbox最大化到整个CDialogBar。我怎样得到CDialogBar的工作区大小,在在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里面用GetClientRect(&rect)得到的不是
CDialogBar的大小阿

#9


应该m_dlgBar.GetClientRect(&rect)

#10


我做了一个初始化函数在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里面调用,可是显示不出来题头
void CMainFrame::InitWarnList(void)
{
(CListCtrl *) pListCtrl=(CListCtrl*)m_wndWarnDlgBar.GetDlgItem(IDC_LISTWARN); 
if(pListCtrl) 

CRect rect;
m_wndWarnDlgBar.GetClientRect(&rect);
rect.left =0;
rect.top =0;
rect.bottom =200;
rect.right =200;
pListCtrl->ScreenToClient(rect); 
pListCtrl->ModifyStyleEx(0, WS_EX_CLIENTEDGE|WS_EX_RIGHTSCROLLBAR);

int i;
LV_COLUMN lvc;

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
CString strTemp[6] = {"序号", "设备号","组号","报警类型","报警描述","报警时间"};
int size[6] = {40,60,40,80,260,80};
for(i = 0; i < 6; i++)
{
lvc.iSubItem = i;
lvc.pszText = (char*)(LPCTSTR)strTemp[i];
lvc.cx = size[i];
lvc.fmt = LVCFMT_LEFT;
pListCtrl->InsertColumn(i, &lvc);
}
}

}

#11


最大化到客户区咋办阿?用那个函数m_wndWarnDlgBar.GetClientRect(&rect);取出来的rect.left=-600多,
其他的数值也不对

#12


改变大小应该在CMainFrame::OnSize里面处理,创建的时候不用管

你的代码在我这里没问题,可以显示标题

#13




void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);

CListCtrl * pListCtrl=(CListCtrl*)m_wndWarnDlgBar.GetDlgItem(IDC_LISTWARN); 
if(pListCtrl) 
{
CRect rect,rect1; 
m_wndWarnDlgBar.GetClientRect(&rect); 

rect.DeflateRect(2,2,2,2);
pListCtrl->MoveWindow(rect);
}

}

#14


我的代码你放在那个位置了?

#15






int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
       if (!m_wndWarnDlgBar.Create(this, IDD_VIEWSELECT,
CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_VIEWSELECT))
{
TRACE0("Failed to create DlgBar\n");
return -1;      // fail to create
}
        InitWarnList();
...
}

#16


onsize里面应该判断一下工具条是否已经建立了吧,要不程序一开始会报错

#17


我这边出不来,郁闷了

#18


引用 5 楼 yansh 的回复:
to Mackz : 
那文档是讲如何把Cdialog变成CdialogBar的,我都实现了,我是问在那里初始化CdialogBar上的CListCtrl的标题,位置及大小。没说到点子上

你仔细看那篇文章了吗?正好解决你的初始化问题啊。
HOWTO: How to Initialize Child Controls in a Derived CDialogBar
如何:如何初始化CDialogBar继承类中的子控件。

#19


lz可能是学俄语的!有这种可能 呵呵!

#20


结帖
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告