自己描画コンボボックスでWM_DRAWITEMメッセージを拾うには?


たか  2005-06-21 03:04:53  No: 57997

はじめまして!
自己描画コントロール(オーナーでなく、コントロールに描画用処理を持たせる)で、コンボボックスを作成中なのですが、WM_DRAWITEM メッセージが受信できません。
WM_MEASUREITEM メッセージは受信出来ているのですが…
どなたか有識者の方のご回答をお願い致します。
以下が処理に関係するであろうコードとなります。

/// ■CMyView.h ////////////////////////////////////////////////

#include "DrawComboBox.h"

protected:
  CDrawComboBox  m_combo;

/// ■CMyView.cpp //////////////////////////////////////////////

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

  //----------------------------------------------------------
  // コンボボックスの作成

  // ウィンドウスタイル、コンボボックススタイルを選択
  // 但し、CBS_OWNERDRAWFIXED は指定しない
  DWORD  dwStyle = WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST|CBS_HASSTRINGS|WS_VSCROLL|WS_TABSTOP;
  // 作成
  if( !m_combo.Create( dwStyle, CRect(0,0,0,0), this, OWNERDRAWCOMBO_CTRLID ) )
    return -1;

  return 0;

}

/// ■CDrawComboBox.h //////////////////////////////////////////

class CDrawComboBox : public CComboBox
{

  public:
  virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  protected:
  virtual void PreSubclassWindow();

/// ■CDrawComboBox.cpp ////////////////////////////////////////

void CDrawComboBox::PreSubclassWindow() 
{
  //----------------------------------------------------------
  // オーナー描画に設定する
  
    if((GetStyle() & CBS_OWNERDRAWVARIABLE) != CBS_OWNERDRAWVARIABLE){
    ModifyStyle(0, CBS_OWNERDRAWVARIABLE);
  }

  CComboBox::PreSubclassWindow();
}

void CDrawComboBox::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
{
  //★★ 呼び出されない! ★★

  // アイテムの描画処理…
}

void CDrawComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS) 
{
  //★★ 呼び出される! ★★

  // lpMISの設定処理…
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加