Graphics.DrawString メソッドで文字が斜体にならないことがある

こんにちは、Visual Studio サポート チームです。 今回は、前回ご紹介した「Graphics.DrawString メソッドで游ゴシック・游明朝の文字を縦書きした際の描画位置が OS によって異なる」と同様に、Graphics.DrawString メソッドを利用した際の不具合についてお知らせします。 前回と重複した記載がありますこと、予めご了承ください。   現象 Graphics.DrawString メソッドでは、引数の Font クラスに対して、FontStyle.Italic を指定することにより、文字を斜体にすることができます。 しかしながら、FontStyle.Italic と FontStyle.Bold をともに指定した場合、Windows 8 以降の OS では、フォントによっては文字が斜体になりません。 本現象が発生するフォントは、以下の 4 種類です。 游明朝 游明朝 Light 游明朝 Demibold 游ゴシック Light Windows 7 では、以下のとおりです。 Windows 8 では、以下のとおりです。   原因 本現象は、Graphics.DrawString メソッドが内部で利用している GDI+ モジュールとフォントの組み合わせで発生する不具合に起因して発生しています。 弊社製品の不具合によりお客様にご迷惑をおかけしておりますこと、深くお詫び申し上げます。 .NET Framework のバージョンとの関連性はないため、.NET Framework のバージョンに関係なく発生します。 また、本現象に関する GDI+…


Graphics.DrawString メソッドで游ゴシック・游明朝の文字を縦書きした際の描画位置が OS によって異なる

こんにちは、Visual Studio サポート チームです。 .NET Framework アプリケーション上で文字列を描画する場合、最も利用されているメソッドは、Graphics.DrawString メソッドではないでしょうか。Graphics.DrawString メソッドでは、描画位置、フォント、色、書式の属性等を指定することができ、印刷にも対応しています。 今回は、Graphics.DrawString メソッドを利用して、游ゴシックまたは游明朝の文字を縦書きした場合に、Windows 7 と Windows 8 以降の OS で、文字の描画位置が異なる現象についてお知らせします。   現象 Graphics.DrawString メソッドでは、引数の Font クラスと StringFormat クラスで指定したフォントと書式属性を用いて文字列を描画することができます。 ここで「游ゴシック」または「游明朝」フォントを指定し、書式属性で縦書き (StringFormatFlags.DirectionVertical) を指定した場合、文字によっては Windows 7 と Windows 8 以降の OS で、描画される位置が異なる場合があります。 たとえば、鉤括弧 “「” を描画した場合、Windows 8 以降では Windows 7 よりも出力される位置が上寄りになります。本現象は、描画対象のコントロールには依存せず、PictureBox コントロールや PrintPreviewControl コントロール等に描画した場合も、現象が発生します。 Windows 7 では、以下のとおりです。 Windows 8 では、以下のとおりです。  …


DataGridView コントロール上でのタッチ操作について

こんにちは、Visual Studio サポートチームです。 今回は、Windows フォーム アプリケーション上でタッチ操作をした場合に、意図せぬ動作となる現象とその回避方法をご紹介します。 Windows フォーム アプリケーションでよく使われるコントロールの 1 つに、DataGridView コントロールがあります。.NET Framework 2.0 から登場したこのコントロールは、データを表形式で表示でき、セル内の値の編集、行や列の追加や削除が簡単にできる非常に柔軟性の高いコントロールのため、アプリケーションの規模を問わず幅広く利用されています。 今回は、この DataGridView コントロール上でフリック操作※ 1 によるスクロールをした場合の現象です。タッチ ジェスチャには様々なものがありますが、フリックとは 1 本または複数の指で移動したい方向に画面を素早くなぞるジェスチャのことで、マウスでのスクロールと似ています。下図のような動作です。 DataGridView コントロールに複数のデータを表示させるとき、スクロール バーを用いることができますが、フリック操作により単一ビュー内で移動することができ、たとえば表内に収まらないセル等を表示できます。 しかしながら、このフリック操作による縦方向のスクロールで、スクロール バーと表示内容が一致しない場合があります。 たとえば、要素数が 30 個の場合、スクロール バーが下端まで移動すれば、30 個目の最下端セルが表示されますが、本現象の場合、スクロール バーが下端まで移動しても最下端のセルが表示されません。上端に移動させた場合も同様に、最上端のセルが表示されません。 – 上方向にスクロールした場合 ——————————- 正常時は「1」が見えていますが、現象発生時は「3」までしか見えません。 ・正常時                                           ・現象発生時  – 下方向にスクロールした場合 ——————————- 正常時は「30」が見えていますが、現象発生時は「29」までしか見えません。 ・正常時                                           ・現象発生時    – 原 ==== この現象は、DataGridView コントロールにおける不具合によって必要なメッセージが送信されないため、表示領域とコントロールの座標との整合性が取れなくなり発生します。タッチ操作に起因するので、マウスによるスクロールでは発生しません。 – 回避方法 ======…


Windows 8、Windows 8.1 におけるタッチ キーボードと IME に関する制限事項

こんにちは、Visual Studio サポートチームです。 今回は、Windows 8、Windows 8.1 におけるタッチ キーボードと IME に関する制限事項についてご紹介します。 弊社 OS 標準 IME である Microsoft IME (以降、MS IME) 以外にも様々なサードパーティ製の IME がありますね。用途に応じて、MS IME とサード パーティ製 IME とを、使い分けている方も多いのではないでしょうか。 実は、タッチ キーボードと IME の組み合わせによっては、予期せぬ入力動作となる場合があります。現時点では、下記二つの動作を確認しています。 1. WPF アプリケーションにおいて、英数字キー以外の入力が IME に通知されない 2. Shift キーのダブル クリックによる Shift ロックができない これらの現象はサード パーティ製の IME を使用しているときに発生し、MS IME を使用しているときは発生しません。 それぞれの現象についてご説明します。 ————————————————————————————– 1. WPF アプリケーション上において、英数字キー以外の入力が IME に通知されない…


Windows 8 でインターネット ゾーンの ClickOnce アプリケーションを実行する場合の SmartScreen 動作について

  Windows 8 でインターネット ゾーンの ClickOnce アプリケーションを実行する場合の SmartScreen 動作について Windows 8 では、システムレベルでセキュリティ強化のための SmartScreen と呼ばれる機能が動作しています。 SmartScreen は、Windows 8 より前の OS では Internet Explorer の機能として実装されていましたが、Windows 8 からはOS システムレベルで導入されました。 SmartScreen に関する情報については、以下のドキュメントをご確認ください。 ウイルスを検出して削除する方法 http://windows.microsoft.com/ja-jp/windows-8/windows-defender#1TC=t1     SmartScreen の表示内容 Windows 8 では、SmartScreen 機能は既定で有効となっていますが、この状態でインターネットゾーンの ClickOnce アプリケーションを実行すると、SmartScreen により以下のような表示によって注意が促される場合があります。   ClickOnce アプリケーションが、従来の OS と同様の開発方法で適切に実装および公開されている場合でも、上記画面が表示される場合がありますので、この記事では、上記画面が表示された場合に、実行するユーザー様にご確認いただきたい点と、開発者様への参考情報をご案内します。     ユーザー様へのご案内 : 実行時に SmartScreen 画面が表示された場合の手順 1) 開発元が十分に信頼できる…