2017-01-18 6 views
-1

Visual C++で入力テキストの書式を変更するための簡単なGUIを作成しており、CFontDialogからフォントタイプを取得する方法を知りたいと思います。CFontDialogからフォントを取得する

入力テキストがEditBoxからm_txtEditにフェッチされ、m_textに渡されます。

void CTxtDlg::OnOK() 
{ 

    m_txtEdit.GetWindowText(m_text); 
    CDialog::OnOK(); 
} 

m_textはCDocクラスのメンバーであり、ユーザーがCFontDialogで選択した内容に従ってフォーマットする必要があります。

選択されたフォントは、CTxtDlgクラスのメンバであるLOGFONT m_lf変数に渡されます。

CFont m_fontは、LOGFONT m_lfに等しくする必要があります。

void CTxtDlg::OnBnClickedButton1() 
{ 


    CFontDialog dlg; 
    int response = dlg.DoModal();       
    dlg.GetCurrentFont(&m_lf); 
} 

CViewクラスは、CFont m_fontに設定されているものに従ってフォーマットされたCString m_textを出力する必要があります。

どうすればよいですか?

+0

Google "cfontdialog example" –

+1

完全に不明確な質問。私は、なぜあなたが編集コントロールからテキストを取得することについて話しているのか分かりません。それはあなたの質問と全く無関係のようです。しかし、私たちはあなたの質問が何であるかを知りません。あなたは ''フォントタイプ '*を 'm_font'と呼ばれる変数に入れることについて話していますが、それはどのタイプであるのか説明しません。そして、別の変数( 'm_lf')を使うコードを表示します。この質問を解決してください。現在尋ねられるように、それは閉じなければならない。 – IInspectable

+0

あなたの質問を編集してください(http://stackoverflow.com/posts/41717311/edit)。情報をコメントとして追加するだけではありません。 – IInspectable

答えて

1

あなたの質問は、基本的にCFontDialogとは関係ありません。 Your commentは、LOGFONT構造を与えられたCFontオブジェクトの作成方法を尋ねています。それはCFont::CreateFontIndirectメンバ関数が何のためにあるのかだ。

if (!m_font.CreateFontIndirect(&m_lf)) { 
    // handle error 
} 
// use m_font 
+1

@マルコ: 'CTxtDlg'と' CDoc'がどのように関連しているのか、どのようなタイプであるのか分かりません。 'CTxtDlg'が' CView'に由来し、 'CDoc'が' CDocument'である場合、[CView :: GetDocument]を呼び出すことができます(https://msdn.microsoft.com/en-us/library/ezc3635w.aspx #cview__getdocument)を実行し、返されたポインタに適切なキャストを行い、そこから 'm_font'にアクセスします。私は考えていませんが、なぜ最初の場所で 'CFont'オブジェクトが文書に終わったのですか?かなり荒いクラスデザイン(あるいはその欠如)のように聞こえます。 – IInspectable

0

まず、あなたのCTxtDlgCFontを追加します。

class CTxtDlg { 
    .... 
    CFont m_font; 
} 

次にフォントを作成して使用します。

void CTxtDlg::OnBnClickedButton1() 
{ 
    CFontDialog dlg; 
    int response = dlg.DoModal(); 
    if(response == IDOK) { 
     dlg.GetCurrentFont(&m_lf); 
     VERIFY(m_font.CreateFontIndirect(&m_lf)); 
     SetFont(&m_font); 
    } 
} 

は限りますのでご注意ください私が理解しているように、フォントはSetFontの後でも有効なままでなければならないので、フォントを簡単に破棄してダイアログにまだ設定されていれば再作成することはできません。

関連する問題