以下のコードは、テキストをチェックボックスで保持している矩形のサイズを計算しています。コードは、画面解像度の異なるモニタを備えた固定コンピュータを使用しているときに問題なく動作します。しかし、外付けモニターを接続したノートパソコンで全く同じコードを実行すると、ボックスが小さすぎます。ノートパソコンの画面解像度は1680x1050で、モニタは1920x1080です。ラップトップと固定コンピュータの結果が異なります
pclRectは、どのコンピュータで実行しても同じ値を持ちます。
誰もがこの問題を解決する方法を知っていますか?
結果:
void CForm::SetSize(CWnd *pCWnd, CRect *pclRect)
{
CDC *pclDC = m_pclPanel->GetDC();
CFont* font = pCWnd->GetFont();
LOGFONT logFont;
font->GetLogFont(&logFont);
CString str;
pCWnd->GetWindowText(str);//Get controller text
CClientDC dc(pCWnd);
dc.SelectObject(font);
int iWidth;
int iHeight;
long lFontSize = -MulDiv(logFont.lfHeight, GetDeviceCaps(pclDC->m_hDC, LOGPIXELSY), 72);
iWidth = dc.GetTextExtent(str).cx; //Get controller text length
iWidth += GetExtraWidth(); //This adds 18 to the width since it's the width of the checkbox itself
iHeight = abs(lFontSize) + GetExtraHeight();
pclRect->bottom = pclRect->top + iHeight;
pclRect->right = pclRect->left + iWidth;
pCWnd->MoveWindow(pclRect);
}
応答いただきありがとうございます、これは多くの役に立ちます。しかし、私は 'BS_MULTILINE'を使用しているので、私は最初の部分を試していません。しかし、私が答えの2番目の部分を実行するとき、私は 'ht'に対して別の結果を得ます。しかし、 'sz.cx'はどちらの場合も13です。何か不足していますか? – Mangs
左のイメージでは、テーマが有効になっているようです。したがって、 'ht'は有効で、' sz.cx'は13になります。右のイメージは、テーマが有効になっていないようです。したがって、 'ht'は' NULL'で 'sz.cx'は15になります。 –
あなたは' ht'、有効、 'NULL'について正しいですが、' sz.cx'は有効かどうかは13です。しかし、あなたは多くの助けをしてくれました。私はここから進むことができます。本当にありがとう、ありがとう! – Mangs