b2b商城網(wǎng)站建設(shè)seo專員崗位職責
在mfc開發(fā)過程中,遇到了下拉框的兩個問題,現(xiàn)在記錄一下
1、把下拉框點開顯示不全我放進去的多條文本
? ? ? ? 解決辦法:把鼠標放到下拉框的倒三角去點一下,鼠標就會變成雙向箭頭,或者先選中一下下拉框再把鼠標移動到倒三角上去再點一下都可以,之后會出現(xiàn)可以調(diào)整大小的八個點,其中只有下面那條的中間的點是全黑色,表示可以往下拖,你就可以按照你需要的高度進行調(diào)整了
2、下拉框的寬度不夠?qū)е挛谋緝?nèi)容顯示不完整
? ? ? ? 解決辦法:為了排版美觀,我的解決辦法是,改變了下拉框的寬度,但是并不修改下拉框這個控件的寬度,以最長的那條文本的寬度為準?????
// 創(chuàng)建設(shè)備上下文
CDC* pDC = partsComboBox.GetDC();// 獲取文本寬度
CSize textSize = pDC->GetTextExtent(maxTxt);// 計算下拉框的寬度
int dropdownWidth = textSize.cx;// 設(shè)置下拉框的寬度
partsComboBox.SetDroppedWidth(dropdownWidth - 70);// 釋放設(shè)備上下文
partsComboBox.ReleaseDC(pDC);
3、控件自適應窗口
? ? ? ? 解決辦法:看以下代碼,以下方法有點BUG,拖動窗口玩一下,拖拽的頻率太高了會導致崩掉,而且像表格的單元格大小是不支持改變的,只會改變表格的大小
在.h文件中聲明:void ResizeUI();
vector<CRect> m_vec_rect_;在.cpp:BOOL dlg::OnInitDialog()
{CBCGPDialog::OnInitDialog();//獲取區(qū)域CRect rect;GetWindowRect(&rect);m_vec_rect_.push_back(rect);CWnd* pWnd = GetWindow(GW_CHILD);//窗體 while(pWnd){pWnd->GetWindowRect(rect);m_vec_rect_.push_back(rect);pWnd = pWnd->GetNextWindow();} }//添加修改大小的消息處理函數(shù)ON_WM_SIZE()
void dlg::OnSize(UINT nType, int cx, int cy)
{CBCGPDialog::OnSize(nType, cx, cy);if(nType != SIZE_MINIMIZED){ResizeUI();}
}void dlg::ResizeUI()
{if (m_vec_rect_.size() > 0){CRect rect;GetWindowRect(&rect);ScreenToClient(rect);//第一個保存的是對話框的Rect CRect saveRect = m_vec_rect_[0];//根據(jù)當前和之前保存的對話框的寬高求比例 float x = rect.Width() * 1.0f / saveRect.Width();float y = rect.Height() *1.0f/ saveRect.Height();int iSize = m_vec_rect_.size();int idx = 1;ClientToScreen(rect);CRect saveChild; CWnd* pWnd = GetWindow(GW_CHILD); while(pWnd && idx < iSize) {saveChild = m_vec_rect_[idx];//根據(jù)比例調(diào)整控件上下左右距離對話框的距離 saveChild.left = rect.left + (saveChild.left - saveRect.left)*x;saveChild.right = rect.right + (saveChild.right - saveRect.right)*x;saveChild.top = rect.top + (saveChild.top - saveRect.top)*y;saveChild.bottom = rect.bottom + (saveChild.bottom - saveRect.bottom)*y;ScreenToClient(saveChild);pWnd->MoveWindow(saveChild);pWnd = pWnd->GetNextWindow();++idx;}}
}