
No.5ベストアンサー
- 回答日時:
サブクラス化するなら WM_PAINTで描画をしてやらないといけないかと
ダイアログプロークで
g_buttonWndProc = (WNDPROC)SetWindowLong( hSts, GWL_WNDPROC, (DWORD)DlgStaticProc);
として コントロールのコールバックを変更します
EndDialogを呼び出す前に
if ( g_buttonWndProc ) {
SetWindowLong( hSts, GWL_WNDPROC, g_buttonWndProc );
g_buttonWndProc = NULL;
}
としてコールバックを元に戻しておきましょう
WM_CTLCOLORSTATICメッセージは親で処理するメッセージです
DlgStaticProcで
case WM_PAINT:
// hdcを取得
hdc = BeginPaint( hDlg, &ps );
// 表示文字列を取得
GetWindowText( hDlg, buf, sizeof( buf ));
// クライアントエリアの取得
GetClientRect( hDlg, &rc );
// 塗りつぶしようのペンを作成
hPen = CreatePen( PS_NULL, 0, 0 );
hPenOld = (HPEN)SelectObject(hdc, hPen);
// 塗りつぶし
Rectangle( hdc, 0, 0, rc.right, rc.bottom );
// ペンの後処理
SelectObject( hdc, hPenOld );
DeleteObject( hPen );
// 描画
DrawText( hdc, buf, _tcslen( buf ), &rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER );
// Paintの後処理
EndPaint( hDlg, &ps );
return TRUE;
# 必要な変数を宣言してください
PAINTSTRUCT ps;
HPEN hPen, hPenOld;
TCHAR buf[256];
RECT rc;
HDC hdc;
といった具合でしょう
No.4
- 回答日時:
どうも Movileでは SS_CENTERIMAGEで垂直の中央寄せは無理なようです
# Windowsの方も 本来SS_BITMAP時の指定ですから
# テキストに対して指定すると 縦の中央寄せになるのは副産物ですし
方法としては Staticテキストをサブクラス化して
これのWindowProcコールバックでWM_PAINTを捕まえ
DrawTextで DT_SINGLELINE | DT_CENTER | DT_VCENTER を uFormatに与えて描画って方法かな
または、描画領域をDrawTextのuFormatにDT_CALCRECTを与えてlpRectに取り出して
余白分大きくしたlpRectでスタティックテキストをリサイズして
ベースのダイアログ内での表示位置を変えるとか
回答ありがとうございます。
ダイアログ内にあるSTATICをサブクラス化しました。
どうにかコンパイルは通りましたが、下記の様に記述しダメでした・・・ただ白いSTATICが表示されます。
元々STATICに表示させてた文字列を削除してます。
ダイアログのコントロールの場合別の方法でしょうか?
BOOL DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int i;
switch(uMsg)
{
case WM_INITDIALOG: // ダイアログボックスが作成されたとき
// 作成したボタンのウィンドウプロシージャのアドレスを取得しておく
g_buttonWndProc = (WNDPROC)(LONG_PTR)GetWindowLong( hStatic, GWL_WNDPROC );
// サブクラス化されたウィンドウプロシージャのアドレスに書き換える
SetWindowLong( hStatic, GWL_WNDPROC, (LONG)(LONG_PTR)DlgStaticProc );
return TRUE;
}
BOOL DlgStaticProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
RECT rt;
switch( uMsg)
{
case WM_CTLCOLORSTATIC:
hStatic = GetDlgItem(hDlg,IDC_ICHI_S);//ダイアログ内のコントロールハンドル取得
GetClientRect(hStatic,&rt);//コントロールの領域座標取得
DrawText((HDC)wParam,L"位置出し",-1,&rt,DT_SINGLELINE | DT_CENTER | DT_VCENTER);//テキスト描画
// サブクラスで処理しなかったメッセージは、本来のウィンドウプロシージャに処理してもらう
return CallWindowProc( g_buttonWndProc, hDlg, uMsg, wParam, lParam );
}
}
No.3
- 回答日時:
★アドバイス
Windowsモバイルの環境ですか。
>文字のサイズも変更したいのですが分かりません。
↑
CreateFont 関数でフォントを作成。
WM_SETFONT メッセージで static コントロールにフォントを設定。
文字のサイズは CreateFont 関数でフォントを作成するときに指定します。
サンプル:
// マクロ関数
#define myCreateFont(x,y,n,i,u,c,s) CreateFont(y,x,0,0,n,i,u,c,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH,s)
#define mySetEditFont(h,font) SendMessage(h,WM_SETFONT,(WPARAM)(font),MAKELPARAM(FALSE,0))
// グローバル変数など
static HFONT hFont;
// フォント作成(WM_INITDIALOGなど)
hFont = myCreateFont(
0, // 平均文字幅
20, // フォントの高さ(これが文字サイズ)
FW_NORMAL, // フォントの太さ
FALSE, // 斜体
FALSE, // 下線
FALSE, // 取り消し線
TEXT("MS ゴシック") ); // フォント名
// フォント設定
HWND hWndStatic = GetDlgItem( hDlg, IDC_ICHI2 );
mySetEditFont( hWndStatic, hFont );
// 終了時(WM_CLOSEなど)
DeleteObject( hFont );
※文字サイズを動的に変更するにはフォントの作成/破棄を繰り返して切り替えます。
※文字サイズは変数にでも保存しておけば良いでしょう。(取得も可能だが保存して使う)
No.1
- 回答日時:
SS_CENTERIMAGEをスタイルに追加してださい
回答ありがとうございます。
SS_CENTERIMAGEでなぜかうまく行きません。
SS_LEFTにしても左に張り付きませんでした・・・
言ってませんでしたがWindowsモバイルのアプリなんですが、
自動でフォントを調整する機能があるようです。
その辺が関係してるのでしょうか?
CTEXT "位置出し",IDC_ICHI2_S,5,80,150,15,SS_CENTERIMAGE
とダイアログリソース(拡張子が.rc)で記入しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式について教えてください。 7 2023/06/18 10:16
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) エクセルの数式で教えてください。 3 2023/04/17 09:25
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 11:41
- Mac OS Macのショートカットの省略形 2 2023/01/26 03:22
- 画像編集・動画編集・音楽編集 写真への文字の貼り付け 4 2023/04/06 18:39
このQ&Aを見た人はこんなQ&Aも見ています
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
ラベル(スタティックテキスト)内での改行。
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
5
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
6
CStaticコントロールの静的イメージ描画
C言語・C++・C#
-
7
ボタンの配置を変更したい
C言語・C++・C#
-
8
エディットボックスのフォントを変えたい
C言語・C++・C#
-
9
MFCでコンボボックスを選択不可状態にしたい
C言語・C++・C#
-
10
コンボボックスの高さを変更したい。
C言語・C++・C#
-
11
ラジオボタンのグループ化
C言語・C++・C#
-
12
CString型の文字列連結について
C言語・C++・C#
-
13
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
14
EDITBOXに関して
C言語・C++・C#
-
15
CEdit の内容が変わった時にメッセージを表示させたい
C言語・C++・C#
-
16
MFCでOnPaintのタイミング
C言語・C++・C#
-
17
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
18
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
19
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
20
ダイアログボックスで指定したサイズどおり表示されない
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックス内の文字サイズ変更
-
VBAのフォント変更(エクセルか...
-
VB.NET2005 TextBox 高さ(Heig...
-
エディットボックスのフォント...
-
リソースエディタでスタティッ...
-
JakaraPOI セル内部のフォント...
-
文字色 エクリプス
-
CSSでの大きさの単位について
-
JComboBoxのサイズ変更
-
リストの行ごとの設定変更について
-
Msgboxで使用するフォントの指...
-
VBにて指定した通りにExcelの列...
-
ドロップダウンリストのフォン...
-
コンボボックスの一部のアイテ...
-
ActiveReport中のフォントサイ...
-
エディットの文字サイズ変更
-
D3DXCreateFontとID3DXFont::Dr...
-
環境変数path と環境変数perlli...
-
wordで分数打とうとするとフォ...
-
CreateFontのフォントの高さに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンボボックス内の文字サイズ変更
-
VB.NET2005 TextBox 高さ(Heig...
-
VBAのフォント変更(エクセルか...
-
フォントの大きさ
-
ドロップダウンリストのフォン...
-
プロポーショナルフォントの文...
-
エディットボックスのフォント...
-
VBA TEXTBOXテキストボックスの...
-
文字色 エクリプス
-
JTableのヘッダー文字のサイズ変更
-
リソースエディタでスタティッ...
-
コンボボックスの一部のアイテ...
-
VBにて指定した通りにExcelの列...
-
Msgboxで使用するフォントの指...
-
リストコンロールの一行だけを...
-
Macbook Word フォント色変更で...
-
EDITBOXに関して
-
static 文字が上に張り付いて・...
-
カレンダーコントロールとサイ...
-
GetTextExtentPoint32での高さ
おすすめ情報