3

CDCを使用せずに、またはディスプレイにリンクされていないCDCを使用せずに、文字列の幅をピクセル単位で取得する方法はありますか。文字列幅を取得する必要があるクラスは、CWnd :: GetDC()を使用するためにCWndから継承せず、既存のCDCを関数に渡す方法はありません。

ディスプレイにリンクされていないダミーのCDCを作成しようとしましたが、これによりMFCがクラッシュします。理想的には次のようなものです。

m_font = new CFont();
m_font->CreatePointFont(size * 10, _T("Arial"));

m_tempCDC = new CDC();
m_tempCDC->SelectObject(m_font);

return m_tempCDC->GetOutputTextExtent(_T("Test")).cx;

編集:文字列リテラルの代わりにフォント名変数を使用する必要があります。

4

2 に答える 2

6

フォントの幅は、ピクセルへの変換方法に依存し、レンダリングされるデバイスに依存します。たとえば、プリンターとモニターでは明らかに異なります。これが、この機能に DC が必要な理由です。

を使用して、デスクトップ用の DC を取得できますCDC::FromHandle(::GetDC(NULL))

于 2011-09-08T17:09:35.710 に答える
0

使用する必要があるフォントがわからない場合、どのように幅を計算できますか?

必要なデバイスコンテキストが表示される場所で幅を計算し、この幅が必要なクラスに渡すことをお勧めします。

于 2011-09-08T16:51:37.153 に答える