SetTextAlignの機能について

このQ&Aのポイント
  • SetTextAlignは、TextOutとExtTextOutに影響を与える機能です。
  • SetTextAlignを使用することで、出力先の長方形領域の左右中央、上下合せを指定することができます。
  • ただし、TextOutでは長方形領域の指定ができないため、ExtTextOutと組み合わせて使用する必要があります。
回答を見る
  • ベストアンサー

SetTextAlignの機能は???

SetTextAlignはTextoutとExtTextOutに影響を与えるとMSDNには書いてあります 出力先の長方形領域の左右中央、上下合せを指定することで印刷文字を整頓していることを指しているのでしょう (1)ところがTextOutにはそもそも長方形領域の指定がありません (2)ExtTextOutで長方形領域を指定し、各種のSetTextAlignを組合わせて印刷テストしましたが、当方の想定通りであったのはTA_LEFT TA_TOPのパラメータだけでした あとはビックリするような場所に印刷されてしまいました どこかにTextOut ExtTextoutとSetTextAlignの関係を易しく、しかも具体的に説明した資料は御座いませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「出力先の長方形領域」っていうのが独立に存在すると思っちゃうと, おそらくわけがわからなくなるんじゃないかなと思います. これは出力する文字列のバウンディングボックス, つまり「出力する文字列全体を囲む (最小の) 長方形」のことです... と, ドキュメントには書いてある.

sato-may
質問者

お礼

ありがとうございます 私も何となくそのようには感じておりました でもなぜマイクロソフト社はこんな面倒な概念を持ち込んだのでしょうか? とても迷惑しております ・・・・・で、  ありがとうございました

その他の回答 (3)

  • davidfox
  • ベストアンサー率58% (21/36)
回答No.4

>具体的に説明した資料は御座いませんでしょうか? 古めの本が良い気がします。 SetTextAlign のようなGDIの基礎的な解説は、私が最初に読んだもので言えば WINDOWS 3.0パワープログラミング http://www.amazon.co.jp/WINDOWS-3-0%E3%83%91%E3%83%AF%E3%83%BC%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%88%E4%B8%8A%E3%80%89-%E3%83%94%E3%83%BC%E3%82%BF%E3%83%BC-%E3%83%8E%E3%83%BC%E3%83%88%E3%83%B3/dp/4938455234/ref=sr_1_13?s=books&ie=UTF8&qid=1348595212&sr=1-13 等でした。 出力例も掲載されてあり、識別子から容易に想像する通りだった記憶があります。 >ビックリするような場所に印刷... 当時、素人な私が SetTextAlign を試したかどうか定かではありませんが、ビックリした記憶はないですね。当時は色んな解説記事も豊富でしたし。 正直、今、マニュアルだけでは辛いと思います。

sato-may
質問者

お礼

ありがとうございます 早速、古本マーケットを検索してみます

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

>TextOut()でSetTextAlign()のフラグの影響を受けるのはTA_UPDATECPのみ…なのではないでしょうか? 違った…ようで。 先ほどのWM_LBUTTONDOWNのハンドラを下記に変更すると、クリックした位置を左右で中心になる位置に描画されます。    SetTextAlign(hDC, TA_CENTER);    TextOut(hDC, xPos, yPos, _T("TEST"), 4); まぁ、こちらもいろいろ試してみるのがいいかと。 # 例によってプリンタの場合は不明。 # テストの為に印刷する…というのは、ちょっと。

sato-may
質問者

お礼

重ね重ねのご指導、誠にありがとうございました 今後とも宜しくお願い申し上げます

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

軽く調べただけですが……。 >(1)ところがTextOutにはそもそも長方形領域の指定がありません TextOut()でSetTextAlign()のフラグの影響を受けるのはTA_UPDATECPのみ…なのではないでしょうか? http://msdn.microsoft.com/ja-jp/library/cc428775.aspx カレントポジションの指定はどうするんだ?って感じですが…… MoveToEx()等で指定でしょうか。 TextOut()では改行出来ませんから、カレントポジションのX座標(縦書きフォントならY座標?)のみが更新されるものと思われます。  case WM_LBUTTONDOWN:   {    HDC hDC = GetDC(hWnd);    int xPos = GET_X_LPARAM(lParam);    int yPos = GET_Y_LPARAM(lParam);    SetTextAlign(hDC, TA_UPDATECP);    MoveToEx(hDC, xPos, yPos, NULL);    TextOut(hDC, 0, 0, _T("Test"), 4);    MoveToEx(hDC, xPos, yPos + 20, NULL);    TextOut(hDC, 0, 0, _T("TEST"), 4);    ReleaseDC(hWnd,hDC);   }   break; で、TextOut()で指定した第2、第3引数が無視されるのを確認しました。 ExtTextOut()では、第2、第3引数で指定した箇所がSetTextAlign()で書かれている基準点となっているようです。 第4引数でETO_CLIPPEDを指定していると第4引数で渡すRECT構造体の影響を受けます。 第3引数を0にして第4引数のRECT構造体を無視させて見てはどうでしょうか?  case WM_LBUTTONDOWN:   {    HDC hDC = GetDC(hWnd);    RECT Rect1 = { 25, 22, 45, 30};    SetTextAlign(hdc, TA_CENTER);    ExtTextOut(hDC, 30, 20, ETO_CLIPPED, &Rect1, _T("TEST"), lstrlen(_T("TEST")), NULL);    SetPixel(hDC, 30, 20, RGB(255, 0, 0));    ExtTextOut(hDC, 30, 70, 0, &Rect1, _T("TEST"), lstrlen(_T("TEST")), NULL);    SetPixel(hDC, 30, 70, RGB(255, 0, 0));    SetTextAlign(hDC, TA_BOTTOM);    ExtTextOut(hDC, 10, 120, 0, &Rect1, _T("TEST"), lstrlen(_T("TEST")), NULL);    SetPixel(hDC, 10, 120, RGB(255, 0, 0));    SetTextAlign(hDC, TA_BASELINE);    ExtTextOut(hDC, 10, 170, 0, &Rect1, _T("TEST"), lstrlen(_T("TEST")), NULL);    SetPixel(hDC, 10, 170, RGB(255, 0, 0));    SetTextAlign(hDC, TA_RIGHT);    ExtTextOut(hDC, 100, 220, 0, &Rect1, _T("TEST"), lstrlen(_T("TEST")), NULL);    SetPixel(hDC, 100, 220, RGB(255, 0, 0));    ReleaseDC(hWnd,hDC);   }   break; で、赤の点が打たれる箇所がそれぞれ基準点ということになります。 印刷の場合にどうなるのか…についてはドライバ次第かも知れませんが…。

sato-may
質問者

お礼

ありがとうございます お示し頂いたサンプルをプリンタに置き換えてテストしました 結果を眺めているとおぼろげにわかって来ました 更に努力致します ありがとうございました

関連するQ&A

  • wordの縮小印刷で用紙の中央に印刷したい

    word2002ですが A4で作成したファイルが大きすぎますので95%程度に縮小するため プリンタのプロパティから倍率指定で95%程度印刷はできるのですが 印刷の始まりが左上に固定されてしまい、上下&左右の余白が同じになりません。 上手に左右中央に印刷する方法ありますでしょうか? フッターの頁指定も中央にしてあるのですが、こちらま左や上に寄ってしまいます。

  • PDFの中央を拡大して印刷したい

    上下左右の余白がかなり大きなPDFファイル(A4用紙用)があります。 中央部分を拡大して、たとえば140%に拡大して同じA4に印刷する方法がわかりません。プリンタの拡大を指定したら、左上の余白も拡大されてしまい。印刷したい中央部分は右下にはみ出してしまいました。 よろしくお願いします。

  • wordの印刷機能

    word2000を使っています。 「A4縦」の文書をハサミで上下に切って使いたいのです。つまり、「A5横」が二つということになります。上下文書の内容は同じなので、ページ設定で「A5横」に設定し同じ文書を2ページ分作り、「印刷」→「拡大縮小」の「1ページあたりの枚数」を2枚にし、「用紙サイズの指定」を「A4 」にして印刷するのですが、文書が上下ではなく左右にいんさつされてしまい、うまくいきません。 ページ設定を「A4縦」にし、上下に同じ文書を作成すればいい話ですが、ハサミで切ったとき、上下の余白が同じになるようにうまくいきません。 どうか、良い解決方法をご存知のかた、教えてください(×_×;)

  • CSSでpxと割合の共存

    以下のような画面を作成しています。 画面を上下2つのボックスに分けて、上側を100pxにして、 下側を残りの領域にしたいのです。 具体的には以下のようなCSSです。 #head { position : absolute; left : 0; top : 0; margin : 0; padding : 0; height : 100px; width : 100%; overflow : hidden; background-color : #eeeeee; } #tail { position : absolute; left : 0; top : 100px; width : 100%; overflow : auto; } これだけでは、tail領域に入るモノによって、 左右スクロールの表示位置がおかしくなります。 上の領域も%で指定して、tailにheightを指定すれば、 うまくいくのは判っているのですが、上の領域をpxで 指定する必要があるためそれはできません。 また、Windowの大きさも変更されることを前提に しています。 なにか、良い方法は無いでしょうか? よろしくお願いします。

    • ベストアンサー
    • CSS
  • 画像の上下中央固定について

    今、ホームページをメモ帳で作っています。 大きな画像1枚だけを、1つのページにドンと置いているんですが その画像を、どんなに画面の大きさが変わっても 常に上下左右の中央にもってきたいんです。 左右は、<center>ではさんだり、テーブルを使ったりして できたんですが、どうしても上下だけができません。 どこかのホームページで、テーブルを使った場合 ALIGN="*"と同じように VALIGN="*"でcenterと指定すればできる と書いてあったのですが、私はできませんでした。 どうすれば、上下の中央に持ってこれるのかご存知の方、教えてください。 お願いします。 

    • ベストアンサー
    • HTML
  • 【CSS】左右可変、中央固定の3カラムレイアウト

    ボックス3つを横一列に、 center:画面中央配置、幅は900px固定 left:残りの左領域全て(幅可変) right:残りの右領域全て(幅可変) というレイアウトをしたいのですが、CSSでの指定方法が解らず困っています。 2カラムや左右固定・中央可変の3カラムレイアウトは様々なサイトで解説されているのですが、 このパターンは中々無いようで見つかりませんでした。 良い方法をご教示いただければと思います。 宜しくお願いします。

    • ベストアンサー
    • CSS
  • 縁なし印刷

    印刷の指定を「四辺フチなし」を指定していますが、上下、または左右に縁がでます。上下左右共フチなしに印刷したいのですが・・・。 パワーポイントでハガキサイズを指定し、プリンタ側も郵便はがきを指定しています。 ※OKWAVEより補足:「EPSON社製品」についての質問です。

  • ワード2007の設定

    ワード2007を印刷レイアウトで開いたとき、上下左右のコーナーに出る記入領域と空白領域を区別する印が表示しません。表示させる設定方法を教えて下さい。

  • winムービーメーカーのテキスト位置について

    Windowsムービーメーカーでテキストを動画にオーバーレイする場合、左右中央の位置指定はできるのですが、上下に指定することはできるのでしょうか?字幕のようなことをやりたいのですが。

  • PDFの拡大印刷

    PDFの拡大印刷 IASBのサイトからDOWNLOADしたPDFですが、A4縦用紙の中央部のA5縦程の領域に文書が表示されています。上下左右の余白がバカでかく、文字が小さすぎるので、これを上下左右に拡大して印刷しようと試行錯誤しているのですが旨くいきません。 どなたかお分かりの方ご教示ください。 ちなみにプリンターと環境は次のとおりです。 プリンター Canon MP640 Canon LBP3311 ソフト環境 Adobe Reader9.0 WINDOWS XP PROFESSIONAL OFFICE PROFESSIONAL

専門家に質問してみよう