エディットボックスにビットマップ

[戻る]
yomi 2005/08/12(金) 10:47:52
環境
Windows XP VC++6 ダイアログベース

質問です。
タイトル通りの事なんですがエディットボックスにビットマップを貼り付けたいです。
どうしたら出来るんでしょうか?

Gak 2005/08/12(金) 15:04:06
MFC だよね?
エディットボックスをサブクラス化するとパッと見イケてそうだけど…
少し無理やりっぽいから問題があるかもしれません。

-------------------------------
// .h
  class edit2 : public CEdit {...};

// .cpp
  BEGIN_MESSAGE_MAP(edit2, CEdit)
      ON_WM_ERASEBKGND()
      ON_WM_CTLCOLOR_REFLECT()
      ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
  END_MESSAGE_MAP()

  BOOL edit2::OnEraseBkgnd(CDC* pDC) {
      ビットマップ貼り付け処理(pDC);
      return true;
  }
  HBRUSH edit2::CtlColor(CDC* pDC, UINT nCtlColor) {
      pDC->SetBkMode(TRANSPARENT);
      return (HBRUSH)::GetStockObject(NULL_BRUSH);
  }
  void edit2::OnChange() {
      Invalidate();
  }

yomi 2005/08/12(金) 19:01:16
レスありがとうございます。

はい!MFCです。

提示していただいたソースで出来ました。
無理やりですかね?しばらくこれを使っていきます。
ありがとうございました。

エディットボックスじゃなくても他にビットマップを貼り付けられたり、
文字列を入力できたりするコントロールはありますか?

Gak 2005/08/13(土) 02:14:24
> 無理やりですかね?
描画変更が求められる度に Invalidate(true) で全体を1から書き直しさせている点など。
# EN_HSCROLL、EN_VSCROLL 等でも Invalidate(TRUE) しないとダメかも

> エディットボックスじゃなくても他にビットマップを貼り付けられたり、
> 文字列を入力できたりするコントロールはありますか?
何処かの誰かがそういうコントロールを作成して公開しているかもしれない。
が…自分は知らないので残念ですが紹介できません。
必要になれば自分で組んでしまうのも良いかと。(CWnd 辺りから派生させて)

古いスレッドには追加発言できません。