对话框中函数
OnInitDialog
{。
m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT, lx / 6);
m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, lx / 6);
。
}ONSIZE((UINT nType, int cx, int cy)
{
lx = cx ; //lx定义为对话框类的私有成员。
}我调试跟踪程序,会发现运行过程是
先调用ONSIZE的到lx为255,然后调用OnInitDialog,
m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT, lx / 6);
m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, lx / 6);
设置CLISTCTRL的栏目
最后再次调用ONSIZE,得到lx为755.(因为对话框的父窗口指定了对话框大小为最大化窗口)
可是此时CLISTCTRL的标题栏目已经在OnInitDialog设置完成了。我本来想动态调整CLISTCTRL栏目宽度,用lx记住CLISTCTRL的宽度,可现在由于运行顺序造成我用的是lx的第一次值,可我需要的是lx的第二次值。高手来啊。我想我应该说清楚啦。有什么方法可以解决我这个问题。
m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT,100);
m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, 100);这样可以,但我不想设置的太固定。
OnInitDialog
{。
m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT, lx / 6);
m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, lx / 6);
。
}ONSIZE((UINT nType, int cx, int cy)
{
lx = cx ; //lx定义为对话框类的私有成员。
}我调试跟踪程序,会发现运行过程是
先调用ONSIZE的到lx为255,然后调用OnInitDialog,
m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT, lx / 6);
m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, lx / 6);
设置CLISTCTRL的栏目
最后再次调用ONSIZE,得到lx为755.(因为对话框的父窗口指定了对话框大小为最大化窗口)
可是此时CLISTCTRL的标题栏目已经在OnInitDialog设置完成了。我本来想动态调整CLISTCTRL栏目宽度,用lx记住CLISTCTRL的宽度,可现在由于运行顺序造成我用的是lx的第一次值,可我需要的是lx的第二次值。高手来啊。我想我应该说清楚啦。有什么方法可以解决我这个问题。
m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT,100);
m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, 100);这样可以,但我不想设置的太固定。
取CLISTCTRL实际宽度:
RECT rect;
m_wbxListCtrl.GetWindowRect(&rect)
long width = rect.right - rect.left;
for (int i = 0; i < 3; i++)
{
m_wbxListCtrl.SetColumnWidth(i, width / 3);
}
如果你希望列表控件和对话框一样框,然后再平均分配每个栏的大小,你可以获得对话框的大小(不用cx参数,用GetClientRect获取),再用列表控件的MoveWindow设置其位置。再用楼上的方法调整每个栏的大小。
{
m_wndSoftCur.SetColumnWidth(i, cx / 5);
}怎么会出错呢
{
CDialog::OnSize(nType, cx, cy); int lx = cx / 2; if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
{
CWnd* child;
child = GetDlgItem(IDC_LIST1);
if (child != NULL)
{
child->MoveWindow(0, 0, cx/2-LINERECT, cy);
}
child = GetDlgItem(IDC_LIST2);
if (child != NULL)
{
child->MoveWindow(cx/2+LINERECT, 0, cx/2-LINERECT, cy);
}
}
if(m_wndSplitter.GetSafeHwnd())
{
m_wndSplitter.MoveWindow(cx/2-LINERECT, 0, LINERECT * 2, cy);
} for (int i = 0; i < 5; i++)
{
m_wndSoftCur.SetColumnWidth(i, lx / 5);
m_wndSoftBase.SetColumnWidth(i, lx / 5);
}
}两个左右LIST的COLUMN都是等宽。可是加
for (int i = 0; i < 5; i++)
{
m_wndSoftCur.SetColumnWidth(i, lx / 5);
m_wndSoftBase.SetColumnWidth(i, lx / 5);
}
就出错