However, this depends on your listctrl's client size.
void CMyView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here int x=GetSystemMetrics(SM_CXSCREEN); int y=GetSystemMetrics(SM_CYSCREEN); CRect rect; m_List1.GetWindowRect(&rect);//运行到这产生异常 rect.right=rect.right*x/1024; rect.bottom=rect.bottom*y/768; m_List1.MoveWindow(&rect);
假如有CListCtrl在1024*768全屏显示,在800*600它就超出屏幕范围了,如何将它也调整成800*600,或者说是按原有比例缩小?
void CMyView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
CRect rect;
m_List1.GetWindowRect(&rect);//运行到这产生异常
rect.right=rect.right*x/1024;
rect.bottom=rect.bottom*y/768;
m_List1.MoveWindow(&rect);
}
这样写对不对呀?
取得分辨率来设定
为什么会产生异常哩?
改成GetDlgItem(IDC_LIST)->GetWindowRect(&rect),也产生异常呢?
这是为什么呢?
到底怎么才能获得控件的位置和大小呢?
。
if(m_List1.getsafewnd())
{
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
CRect rect;
m_List1.GetWindowRect(&rect);//运行到这产生异常
rect.right=rect.right*x/1024;
rect.bottom=rect.bottom*y/768;
m_List1.MoveWindow(&rect);
}
为什么会产生异常哩?
改成GetDlgItem(IDC_LIST)->GetWindowRect(&rect),也产生异常呢?
这是为什么呢?
到底怎么才能获得控件的位置和大小呢?
-----------------------------------------------------如果在窗口还没有出来的时候就调用,就会出现异常。因为窗口的句柄还是空的。
在一个安全的时机获得,并且在前面判断一下就好了。----------------------------------------------------
以上方法难道不会导致缩得太小?
不知道VC的字体大小可不可变
----------------------------------------------------
窗口的大小是自己设置的,嫌小放大不就的了。其实只要计算出一个合适的数字就可以了。只是一个算术题而已。
VC控件的字体是随便设置的,包括大小、颜色、编码、字体……。
用 SetFont 方法就可以了。