• 締切済み

ダイアログタイトルバーをダイアログ左側に移動する

VC++ 2008でダイアログを作成していますが,タイトルバーは通常ダイアログの上部に表示されます,それをダイアログ左サイドに配置したいのですが、できません。いろいろサンプルを調べたのですが、それらしいものは、みつけられませんでした。タイトルバーを別途独自に作成するサンプルは、あったのですが記述が少し複雑。やはり、純然たるタイトルバーを変更したいので、どなたかご存知ならご指導をお願いいたします。Win32APIも調べたのですが、タイトルバーのRectがとれません。  よろしくお願いいたします。

みんなの回答

回答No.1

 こんにちは。  タイトルバーはボタンやテキストボックスの様なコントロールでは無いので、MoveWindow()で移動したりShowWindow()で非表示にしたりと言った芸当は不可能です。  例えば、縦に出す場合はWM_NCHITTESTを処理して、WM_NCPAINTで縦に描写する事で実現します。  参考にして来たサンプルコードの数々は、律儀にタイトルバーを着色したり、タイトル名を書いたり、ドラッグ判定したり、と言った事が成されていると思いますが、其れこそが「通常のタイトルバーでは満足出来ない場合、最低限必要な処理」と言う事になります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ダイアログ画面全体をマウスで動かせるようにするには

    VC++、MFC、WindowsXPです。 現在の状況としてはは ダイアログベースによる作成。 ダイアログにオーナー描画でビットマップを貼り付けている。 という感じです。 普通ウィンドウのタイトルバーをマウスで押してウィンドウの位置を動かしますが、たまに画面のどこを押しても動かせるようなウィンドウがありますが、あれは一体どうやっているのでしょうか? よろしくお願いします。

  • ダイアログの領域全てをエデイトボックスが占めるプログラム

    お世話になります。 現在ダイアログにエディトボックス(IDC_EDIT1)を1つおいて、このエディトボックスがダイアログの全体を占める様なプログラムを作成しています。 以下のようなプログラムでは、サイズ変更をした時に初めてダイアログ内にエディトボックスが動的に占めるのですが、これをプログラムを起動したときから既にエディトボックスがダイアログの全体を占めている状態にしたいのですが、どのようにすればよいでしょうか? 開発環境はVC++ 6.0 MFC WindXPです。 ご教示よろしくお願いします。 プログラム: void CxxxDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: この位置にメッセージ ハンドラ用のコードを追加してください CRect rect; CWnd* pEdit = GetDlgItem( IDC_EDIT1 ); GetClientRect(&rect); if( pEdit != NULL ) { rect=CRect(0,0,cx,cy); pEdit->MoveWindow( &rect, TRUE ); } }

  • ダイアログアプリのウィンドウ領域について

    いつもお世話になります。 VC++6.0MFCダイアログベースでアプリを開発しているのですが、 ビットマップ画像(100×100)をダイアログに貼り付けています。 円の画像ですが、ビットマップなので四角の画像になっています。 そこで楕円のリージョンを作って、 // 楕円のリージョンを作る m_rgn.CreateEllipticRgn(0,0,100,100); // ウィンドウのリージョンを設定する SetWindowRgn((HRGN)m_rgn ,TRUE); こんな感じで表示したらウィンドウは丸くなっています。 そこで上記で作成したリージョンの上をマウスがオーバーしたら 画像を差し替えたいのですが、どうしても、ダイアログ の領域(四角)で反応してしまいます。 CPoint pos; CRect rect; GetCursorPos(&pos); GetWindowRect(&rect); if (rect.PtInRect(pos)) { // マウスが上に来ている m_bMouseOver = TRUE; } else { // マウスは上にはない m_bMouseOver = FALSE; } こんな感じでm_bMouseOverの中身を見て画像を差し替えています。 リージョンで作成した楕円の上だけで反応させるには どのようにすればいいのでしょうか? わかりにくいかもしれませんがアドバイスよろしくお願い致します。

  • フォーカスが移動したタイミングを知りたい

    こんにちは。 VC++6.0にて、ダイアログベースの Windowsアプリケーションを作成しています。 質問なのですが、複数あるエディットボックスの中で 特定したエディットボックスのフォーカスが失われた契機を知るには、どのようにすればよいのでしょうか。 ウィンドウメッセージを待つのでしょうか。 出来ましたら、サンプルコードなど記載頂けると幸いです。 よろしくお願いします。

  • エディットボックスの処理で画面がちらつきます。

    VC++ 6.0 Win32APIにてダイアログベースのプログラムを作成しております。 ダイアログに18個のエディットボックスを配置しておりますが、そのエディットボックスのテキストを SetDlgItemText()を使って全て空欄にすると(第3引数に””を指定)画面がちらつきます。 同ダイアログ内のリストコントロールがダブルクリックされた際のイベントを拾ってエディットボックスクリアの処理を実行しているのですが、ちらつきを抑える手法はありますでしょうか?

  • 起動時に何のダイアログも表示されない

    こんにちは。 大変恐縮ですがこちらで質問させてください。 開発環境はVC2005のMFCです。 質問内容は題名の通りなのですが、デバッグを実行しても何のダイアログが表示されない という状態になってしまいました。 すぐにデバッグが終了してしまいます。(「デバッグなしで開始」でも同様です。) プロジェクトはダイアログベース、スタティックライブラリ、ソケットを使える設定で 作成しました。 プロジェクトを作成してから他ダイアログを作り全てのダイアログに新しくボタンを配置したのと、初期配置のOK,キャンセルボタンを削除した以外は、コード上に手を加えるなどはしていません。 また、以下のようなエラーコードが出力されました。 Dumping objects -> f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {75} normal block at 0x003496B8, 488 bytes long. Data: < > E8 03 00 00 00 00 00 00 E9 03 00 00 00 00 00 00 {74} normal block at 0x00349580, 248 bytes long. Data: < > FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 Object dump complete. プログラム '[1528] test.exe: ネイティブ' はコード 0 (0x0) で終了しました。 何か原因と対策等がわかりましたら回答をいただければと思います。 よろしくお願いします。

  • キーボード入力について

    VC++6.0MFCのダイアログベースでデスクトップアプリを作成しています。 現状ですが、まずEscとEnterをクリックすると、 アプリが終了してしまいます。 なぜかわからないのですが、 そもそもキーボード入力を無効にしたいのです。 SetWindowsHookExというAPIを使えばできそうなんですが、 いかんせん、初心者でしてどの部分でどのような記述を すればいいのかがわかりません。 どなたかご教授ください。 よろしくお願いいたします。

  • 自作ダイアログボックス中のエディットボックスでCtrl+Aを使えるようにしたい。

    リソースエディタで作成したダイアログボックスの中のエディットボックスで、 Ctrl+Aで全範囲選択をしたいのですが実現方法が分かりません。 同様に、リストビューの選択行を「Delキー」で削除させる方法も教えていただきたいです。 (削除ボタンを作成し、その押下によって削除できるようにはなっています。) 環境は、VC++ 6.0、Win32 APIです。 よろしくお願い致します。

  • ダイアログボックスのタスクバーアイコンを表示するには

    BCC32で、C言語によりWin32 APIを用いたプログラムを勉強しております。 DialogBox()を使用すれば、ウィンドウ上に配置した各種コントロールのキーボード操作をWindowsに任せられて楽なので、メインウィンドウを非表示にして、ダイアログボックスによるアプリケーションを作っています。 ただし、この場合、タスクバーにアイコンが表示されません。 DialogBox() で作成したウィンドウについて、タスクバーにアイコンを表示させることは可能でしょうか? また、どのようにすれば良いでしょうか?

  • VC++ダイアログボックスの表示更新がわかりません

    現在ダイアログボックスにスタティックコントロールを配置し、表示更新する際不明な点があります。VC6.0 MFCです。 1、ダイアログボックス上のコントロールに、作成したビットマップを表示させる際、OnInitDialog関数内で、Bitbiltしていますが、表示されません。 ボタンクリックイベント等で、同様の手順でBitbiltすると表示されます。 これはなぜなのでしょうか? また、ダイアログボックスが表示された際にBitmapを表示するにはどうすればよいでしょうか? 2、また、表示されたBitmapはダイアログボックスを動かしたり、隠れたりすると消えてしまいます。 再表示を自動的にさせるにはどうすればよいでしょうか?(OnDraw関数のようなものがあるのでしょうか?) 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。