mfc-ml

2005年02月

27

[mfc 50498] Re: ツールバーのドロップダウンボタン高さ

すいません、なかなか届かないので宛先を間違えたかと思ってもう1度出して
しまいました。
ち...@mfc.acty-net.ne.jp宛でした。
27

[mfc 50499] Re: [mfc 50478] Re:Re:IMEの On/Off の方法について

こんにちわ、村尾DOSさん、大槻です。

すみません、ご返事が遅くなりました。
At 20:41 05/02/20, you wrote:
>私はこんなことをやっていますが参考になりますか?
>  HWND hIme = ImmGetDefaultIMEWnd(hWnd);
>  long ls = SendMessage(hIme, WM_IME_CONTROL, IMC_GETOPENSTATUS, NULL);

これでうまくいきました。IMC_GETOPENSTATUS, IMC_SETOPENSTATUSって、
隠しコマンドなんですね。ヘッダにもMSDNにも記述がなくて、
わかりませんでした。
WinCE用にはあるみたいですけど。


--- .      __ ____〒   !!|========================|
 ★  * …())_)_)_)=◎* |                       |
  ***       ̄    △   ゜( v )|        大槻正樹        |
 *  ★         /|\    (_) | m...@nifty.com|
             /  |  \  | | |========================| 
27

[mfc 50497] ツールバーのドロップダウンボタン高さ

はじめまして。aqaと申します。
ツールバーでドロップダウンボタンを作成しようと思っていますが、
ボタン高さが通常より高くなり、ボタンの下端が切れて表示されてしまいます。
ソースは以下の通りです。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // フレームのクライアント領域全体を占めるビューを作成します。
    if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
        CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
    {
        TRACE0("ビュー ウィンドウを作成できませんでした。\n");
        return -1;
    }

    if (!m_wndToolBar.CreateEx(this)) {
        TRACE0("ツール バーの作成に失敗しました。\n");
        return -1;      // 作成できませんでした。
    }

    m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_
    DRAWDDARROWS);

    // イメージ登録(24*24, 256色、透過色指定)
    m_bmp1.LoadBitmap(IDB_BITMAP1);
    m_imageList.Create(24, 24, ILC_COLORDDB | ILC_MASK, 1, 1);
    m_imageList.Add(&m_bmp1, RGB(192, 192, 192));
    m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imageList);

    // 文字列登録
    m_wndToolBar.GetToolBarCtrl().AddStrings(_T("切り取り\0"));

    // ボタン登録
    TBBUTTON tbb;
    memset(&tbb, 0, sizeof(tbb));
    tbb.iBitmap = 0;
    tbb.idCommand = ID_EDIT_CUT;
    tbb.fsState = TBSTATE_ENABLED;
    tbb.fsStyle = TBSTYLE_BUTTON | TBSTYLE_DROPDOWN;
    tbb.dwData = 0;
    tbb.iString = 0;
    m_wndToolBar.GetToolBarCtrl().AddButtons(1, &tbb);

    // サイズ設定
    CRect rcItem;
    m_wndToolBar.GetItemRect(0, &rcItem);
    m_wndToolBar.SetSizes(CSize(rcItem.Width(), rcItem.Height()), 
    CSize(24, 24));

    // サイズ確認用
    CRect rcTest;
    m_wndToolBar.GetItemRect(0, &rcTest);

    return 0;
}

SetSizesで設定している高さは51になり、直後にGetItemRectすると、高さが58
になってしまいます。
ちなみにこの現象が起きるのは、XPテーマにしているときで、Classicスタイル
にすると高さは両方とも43となり正しくなります。
(リソースにマニフェストファイルを追加しています。)
また、TBSTYLE_EX_DRAWDDARROWS あるいは TBSTYLE_DROPDOWN を除いて矢印が表
示されないようにするとXPテーマ時でも高さは両方とも43となり正しくなります。
どなたか原因が分かりますでしょうか?

開発環境は下記の通りです。
WindowsXP Home
VC++.NET 2003

以上よろしくお願いします。
27

[mfc 50496] ツールバーのドロップダウンボタン高さ

はじめまして。aqaと申します。
ツールバーでドロップダウンボタンを作成しようと思っていますが、
ボタン高さが通常より高くなり、ボタンの下端が切れて表示されてしまいます。
ソースは以下の通りです。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // フレームのクライアント領域全体を占めるビューを作成します。
    if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
        CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
    {
        TRACE0("ビュー ウィンドウを作成できませんでした。\n");
        return -1;
    }

    if (!m_wndToolBar.CreateEx(this)) {
        TRACE0("ツール バーの作成に失敗しました。\n");
        return -1;      // 作成できませんでした。
    }

    m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_
    DRAWDDARROWS);

    // イメージ登録(24*24, 256色、透過色指定)
    m_bmp1.LoadBitmap(IDB_BITMAP1);
    m_imageList.Create(24, 24, ILC_COLORDDB | ILC_MASK, 1, 1);
    m_imageList.Add(&m_bmp1, RGB(192, 192, 192));
    m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imageList);

    // 文字列登録
    m_wndToolBar.GetToolBarCtrl().AddStrings(_T("切り取り\0"));

    // ボタン登録
    TBBUTTON tbb;
    memset(&tbb, 0, sizeof(tbb));
    tbb.iBitmap = 0;
    tbb.idCommand = ID_EDIT_CUT;
    tbb.fsState = TBSTATE_ENABLED;
    tbb.fsStyle = TBSTYLE_BUTTON | TBSTYLE_DROPDOWN;
    tbb.dwData = 0;
    tbb.iString = 0;
    m_wndToolBar.GetToolBarCtrl().AddButtons(1, &tbb);

    // サイズ設定
    CRect rcItem;
    m_wndToolBar.GetItemRect(0, &rcItem);
    m_wndToolBar.SetSizes(CSize(rcItem.Width(), rcItem.Height()), 
    CSize(24, 24));

    // サイズ確認用
    CRect rcTest;
    m_wndToolBar.GetItemRect(0, &rcTest);

    return 0;
}

SetSizesで設定している高さは51になり、直後にGetItemRectすると、高さが58
になってしまいます。
ちなみにこの現象が起きるのは、XPテーマにしているときで、Classicスタイル
にすると高さは両方とも43となり正しくなります。
(リソースにマニフェストファイルを追加しています。)
また、TBSTYLE_EX_DRAWDDARROWS あるいは TBSTYLE_DROPDOWN を除いて矢印が表
示されないようにするとXPテーマ時でも高さは両方とも43となり正しくなります。
どなたか原因が分かりますでしょうか?

開発環境は下記の通りです。
WindowsXP Home
VC++.NET 2003

以上よろしくお願いします。
24

[mfc 50495] Re: CTimeの2038年問題対応は?

Imabeppu です。

Quoted from
 Subject: [mfc 50494] Re: CTime の2038年問題対応は?
 From: Hiroyuki Matsumoto <m...@softplanet.co.jp>
 Date: 2005/02/24 13:50:21 (Thu, 24 Feb 2005 13:50:21 +0900)

>  ANSI C では time_t の実際の型が何かは規定していないんじゃなかったでし
> たっけ?(自信ないけど)

  なるほど。

>  つまり、2038年問題は厳密に言うと、time_t を long で定義している処理系
> が大半であること(かつ long であることを前提にプログラムが作成されている
> こと)が問題なのであって、C言語自身の問題じゃないのでは。

  規格上、long は32ビット固定でしょうか?
  とにかく、2038年問題の原因は time_t を32ビット符号付き整数で定
  義してあったこと、ということですね。
  32ビットより大きな整数を使えなかった時代があったので、仕方ない
  のかもしれませんが、せめて unsigned long だったらよかったのに
  と思ってしまいますね。

>  time_t を long と決め打ちさえしていなければ、64ビット化されたライブラ
> リでコンパイルし直すだけ済むんでしょうけど、そうはいかないでしょうね。
> (だから Microsoft は いっそのこと 64ビット系の型と関数を別にしちゃえっ
>  て考えたんだろうな)

  time_t を64ビットで定義しなおしてビルドしなおせば OK なのでは
  ないでしょうか?
  ただ、そのライブラリを利用しているものをすべてビルドしなおさな
  ければならなくなります。そういう問題を避けるため(旧バージョン
  との互換性を保つため)、Microsoft は time_t の定義をそのままと
  して、新しい型を用意したのではないでしょうか?
  たとえば、MSVCRT.DLL の time_t が突然64ビットになったら大きな
  おおごとでしょうね。(^^;)

>  最終的には time_t の64ビット化へ収束していくのは間違いないでしょうが、
> 今現在の過渡期には処理系ごとに対応マチマチでしょう。

  そうですね。

  だいぶすっきりしました。ありがとうございました。


--
|=====  ∧ ∧  ===============|
|==  n(=⌒o⌒=)n  Imabeppu  ==|
記事検索
Amazon.co.jp
  • ライブドアブログ