RichEdit にタブを設定する

RichEdit にフォントとタブを設定してテキストを表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. ウインドウに貼り付けた RichEdit にフォントとタブを設定してテキストを表示します。
    RichEdit にフォントを設定してテキストを表示する手順は RichEdit にフォントを設定する を参照して下さい。
  2. タブストップの位置は twips を単位として設定します。
    1 twips は 1/20ポイントに相当します。
    #define で TWIPS を宣言しています。
    タブの設定には PARAFORMAT 構造体を使います。
    #define     TWIPS       20      //twips(1/20ポイント)
    PARAFORMAT  pf;     //Rich Edit Para Format
    
  3. 表示するテキスト(g_buf)の中で、タブキーを使って下さい。
    LPSTR		g_buf=
    {
    	"Rich Edit Box\n"
    	"タブの設定\n"
    	"....:....1....:....2....:....3....:....4\n"
    	"0	1	2	3	4	5\n"
    	"6	7	8	9\n"
    	"A	B	C	D	F	G	H	I\n"
    };
    
  4. WM_CREATE から LoadLibrary() で RICHED32.DLL をロードします。
    CreateWindowEx() で Rich Edit を生成してウインドウに貼り付けます。
    SetWindowText() でテキスト(g_buf)を表示します。
    テキストを選択状態に設定して SetFont() 関数でフォントを設定します。
    続いて SetTAB() 関数でタブを設定します。
    フォントとタブの設定が終われば、選択を解除します。
        switch (msg)
        {   case WM_CREATE:
                hRtLib = LoadLibrary("RICHED32.DLL");
                g_hREdit = CreateWindowEx(WS_EX_CLIENTEDGE,"RICHEDIT","",
                        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | WS_HSCROLL |
                        WS_VSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL,
                        0,0,0,0,
                        hWnd,(HMENU)IDC_RICHEDIT,g_hInst,NULL);
                SetWindowText(g_hREdit,g_buf);
                SendMessage(g_hREdit,EM_SETSEL,0,strlen(g_buf));    //TEXT選択
                SetFont();      //フォントの設定
                SetTAB();       //TAB を設定
                SendMessage(g_hREdit,EM_SETSEL,-1,0);               //選択解除
                SetFocus(g_hREdit);
                return 0L;
    
  5. タブを設定する SetTAB() 関数です。
    PARAFORMAT 構造体を初期化します。
    dwMask にフラグを設定します。
    今回は6個のタブを設定してみました。
    BOOL SetTAB()
    {   int     wips;
        memset(&pf, 0, sizeof(PARAFORMAT));
        pf.cbSize= sizeof(PARAFORMAT);
        pf.dwMask = PFM_TABSTOPS;
        wips= TWIPS+2;
        pf.cTabCount= 6;
        pf.rgxTabs[0]= wips*20;
        pf.rgxTabs[1]= wips*40;
        pf.rgxTabs[2]= wips*60;
        pf.rgxTabs[3]= wips*80;
        pf.rgxTabs[4]= wips*100;
        pf.rgxTabs[5]= wips*120;
        if (SendMessage(g_hREdit,EM_SETPARAFORMAT,0,(LPARAM)&pf)==0)
        {   MessageBox(NULL, "EM_SETPARAFORMAT に失敗", "Error Message", MB_OK);
            return FALSE;
        }
        return TRUE;
    }
    

超初心者のプログラム入門(Win32API C++)