ホーム » MFC » CComboBox::SetItemHeight (-1,…)

2023年5月
 123456
78910111213
14151617181920
21222324252627
28293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 95,593 アクセス


CComboBox::SetItemHeight (-1,…)

高 DPI 対応で修正していて,コンボボックス(特に,オーナードロー?)の高さが他に比べて不自然.
コンボボックスの高さの変更


ドキュメントを見ると,CB_SETITEMHEIGHT と思うが,指定方法がよくわからない.
コンボボックス 高さ 変更」で 検索する と「できない」と記述されている所もある.


CB_SETITEMHEIGHT で検索していると,-1 を指定しているものがある.
さらに,CB_GETITEMHEIGHT のドキュメントを見ると,次の様にある.

選択フィールドの高さを取得するには、このパラメーターは -1 である必要があります

どうも CB_SETITEMHEIGHT の表現がうまくないものと思う.


次の様なコードで対応.

{
	CRect	rect ;
	m_CtrlStrText.GetClientRect(&rect) ;
	FontFace.SendMessage(CB_SETITEMHEIGHT,-1,rect.Height()) ;
	FontFace.SendMessage(CB_SETITEMHEIGHT, 0,rect.Height()*15/10) ;
	}

CComboBox::SetItemHeight (-1,…)


2023/05/16
ドロップダウンの幅がうまくなかったが,共通コードを見るといろいろ考慮しなければならない部分が多い.
そのため,次の様なコードで対応.

{
	new_w = now_w ;
//	new_w = now_w * 15 / 10 ;
	new_w = int(new_w * ::GetDPI_scale(this->GetSafeHwnd())) ;  // new_w*(::GetDpiForWindow()/96.)
	FontFace.SendMessage(CB_SETDROPPEDWIDTH,new_w) ;
	}

SendMessage(CB_SETDROPPEDWIDTH,...)


間違っているかもしれないが,CB_SETITEMHEIGHT を簡単にテストしたことのまとめ.

通常のコンボボックスの場合 -1 で,全ての項目の高さを設定できる
オーナードロー 固定 -1 で,エディットボックス部分の高さを指定
0 で,ドロップ部分の項目の高さを指定
オーナードロー 可変 -1 で,エディットボックス部分の高さを指定
0 以上で,ドロップ部分のそれぞれの高さを指定
Is this 投稿 useful? Useful Useless 1 of 1 people say this 投稿 is useful.
%d人のブロガーが「いいね」をつけました。