會要設定精準的寬度是因為後面static text後面有時候要接Edit control

如果寬度設定不夠精準就會發生離很遠的情況

正常會先用方法1,如果後面不放其他控制項的話作為設定寬度就夠了

如果後面要放控制項就會用方法2

(實作結果圖片放在文末)

方法1:

// 獲取所需字串  可長可短
CString msg;
msg.LoadStringW(IDS_VFX_NUM_OF_OPEN);

// 獲取字串的長度(pixel)
GetDlgItem(IDC_STATIC)->SetWindowTextW(msg.GetBuffer());                
CDC *pDC = GetDlgItem(IDC_STATIC)->GetDC();                
CSize sz = pDC->GetTextExtent(msg);
int szX = sz.cx;
ReleaseDC(pDC);

// 設定位置
GetDlgItem(IDC_STATIC)->SetWindowPos(NULL, n_Xrect, n_Yrect, szX, n_Height, NULL);

方法2:

// 獲取所需字串  可長可短
CString msg;
msg.LoadStringW(IDS_VFX_NUM_OF_OPEN);

// 獲取字串的長度(pixel)
GetDlgItem(IDC_STATIC)->SetWindowTextW(msg.GetBuffer());                
CDC *pDC = GetDlgItem(IDC_STATIC)->GetDC();                
CSize sz = pDC->GetTextExtent(msg);
int szX = sz.cx;

// 會再用DrawTextW獲取實際繪出的文字寬度
CRect CrText;
CrText.SetRect(n_Xrect, n_Yrect, szX, n_Height);
pDC->DrawTextW(msg, &CrText, DT_LEFT | DT_NOPREFIX | DT_WORDBREAK | DT_CALCRECT);
szX = CrText.Width(); // 獲取新寬度

ReleaseDC(pDC);

// 設定位置
GetDlgItem(IDC_STATIC)->SetWindowPos(NULL, n_Xrect, n_Yrect, szX, n_Height, NULL);

 

方法1實作=>2017-05-09 18 30 37.png

方法2實作=>2017-05-09 18 30 07.png

arrow
arrow

    跪著讀 發表在 痞客邦 留言(0) 人氣()