ダイアログボックスを一致させようとしています。私はグーグルやランダムテストなどをすべて行ってきましたが、それができない場所を読んでもいます。
私ができることは、メッセージの1つを使用してフォントと色を設定することですが、描画自体についてはどこにもありません。
私はそれができる必要があると思います...
誰にもアイデアはありますか?または、これについて何か知っていますか?
ダイアログボックスを一致させようとしています。私はグーグルやランダムテストなどをすべて行ってきましたが、それができない場所を読んでもいます。
私ができることは、メッセージの1つを使用してフォントと色を設定することですが、描画自体についてはどこにもありません。
私はそれができる必要があると思います...
誰にもアイデアはありますか?または、これについて何か知っていますか?
編集コントロールは所有者の描画をサポートしていないようですが、それでも直接の問題を解決できます。EDITTEXT の MSDN ページによると、既定では、リソース ファイル内の編集コントロールにはWS_BORDER
スタイル セットがあります。次のようなものでそれを取り除くことができるようです:
EDITTEXT IDC_EDIT1,17,51,136,14,ES_AUTOHSCROLL | NOT WS_BORDER
ステータス バーについては、実際のステータス バーではなく、色をカスタマイズした静的コントロールを使用してみてください。または、独自に作成し、リソース ファイルでウィンドウ クラス名を指定し、ダイアログを表示する前にクラスを登録することもできます。
更新: うわー、ステータス バーのドキュメントはひどいです。ただし、所有者は 1 枚引くことができます。次の手順を実行します:
// where hStatus is the HWND of a status bar...
// You must set simple mode to false, because simple mode doesn't
// support owner draw.
SendMessage(hStatus, SB_SIMPLE, FALSE, 0);
// I'm assuming 1 status bar part for demonstration. Setting the right edge
// for the 1 part to -1 make it take up the whole status bar.
int partWidths[] = { -1 };
SendMessage(hStatus, SB_PARTS, 1, reinterpret_cast<LPARAM>(partWidths));
// There is background stuff that stays behind even with owner draw,
// so you have to set the background color to black, too, to get rid of
// any appearance of borders.
SendMessage(hStatus, SB_SETBKCOLOR, 0, RGB(0, 0, 0));
// There is still a slim border that stays behind, so you need to set
// SBT_NOBORDERS in addition to SBT_OWNERDRAW. The 0 is the index of the
// status bar part. It could be anything between 0 and 255.
SendMessage(
hStatus,
SB_SETTEXT,
SBT_NOBORDERS | SBT_OWNERDRAW | 0,
reinterpret_cast<LPARAM>(_T("Status")));
そこからWM_DRAWITEM
、ステータス バーの も処理する必要があります。さて、ステータスバーのドキュメントがひどいと私が言う理由について...
ドキュメントSB_SETTEXT
の下位ワードの上位バイトは、WPARAM
次の値のいずれかになります。これには 2 つの問題があります。
それらを組み合わせることができます。これを機能させるには、あなたがしなければなりません。MFCもそれを行います。私がチェックしました。
と書きたくなるかもしれませんMAKEWPARAM(MAKEWORD(0, SBT_OWNERDRAW), 0)
。これは機能しません。外観によって、SBT_
スタイルは定義されているため、インデックス値と OR を使用すると、下位ワードの上位バイトに自動的に表示されます。
SB_SETTEXT
正しく使用する方法を理解するために、MFC のソース コードを調べなければならなかったことは明らかです。
エディット コントロールにはオーナー描画モードがありませんが、エディット コントロールをサブクラス化しWM_ERASEBKGND
、WM_NCPAINT
、WM_PAINT
、 などのメッセージやWM_CTLCOLOREDIT
、エディットの親ウィンドウに送信されるメッセージを処理できます。
パート 2、編集でテキストを垂直方向に配置するための答え:
RECT rect;
GetClientRect(GetDlgItem(hwnd, IDC_TIMEINPUT),&rect);
Rectangle(hdcEdit, rect.left, rect.top, rect.right, rect.bottom);
rect.left+=5; rect.top+=5; rect.right+=5; //rect.bottom+=5;
SendMessage(GetDlgItem(hwnd, IDC_TIMEINPUT), EM_SETRECTNP, 0, (LPARAM)&rect);
複数行にする必要があり、実際にはさまざまな数字をいじって、単一行に保ち、垂直方向の位置合わせを維持する必要があります。EMS_SETRECTNP を使用すると、テキストを配置する場所を指定できるため、Edit の高さを大きくすることができます。