【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19477

リストボックスで行ごとの太字設定
投稿者---エビス丸(2005/01/25 20:12:48)


こんばんは エビス丸です。
お世話になっております。

VC++6.0 SDK にて開発中です。
タイトルにある通り、リストボックスの特定の行を太字にしたいので、
オーナードローで、単に太字にすることはできました。
しかし、これだとすべての行が最後に設定した内容で表示されてしまうようです。
(これは正しいでしょうか?)
私がやりたいのは、行ごとの設定なので、用件を満たしません。
代案としてMSFlexGridを調べたのですが、
どうにもMFCが大半で、かつ断片的な情報しか得られませんでした。

そこで、皆さんのお知恵を拝借したくお願いします。
上記の用件を満たす代案で、SDKで実現するにはどのようにすればよいでしょうか。
また、それを解説しておられるサイトなどありませんでしょうか。
よろしくお願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:リストボックスで行ごとの太字設定 19479 REE 2005/01/25 20:23:10


No.19479

Re:リストボックスで行ごとの太字設定
投稿者---REE(2005/01/25 20:23:10)


>こんばんは エビス丸です。
>お世話になっております。
>
>VC++6.0 SDK にて開発中です。
>タイトルにある通り、リストボックスの特定の行を太字にしたいので、
>オーナードローで、単に太字にすることはできました。
>しかし、これだとすべての行が最後に設定した内容で表示されてしまうようです。
>(これは正しいでしょうか?)
いいえ
太字で描画した後、フォントを元に戻していないのではないですか?



この投稿にコメントする

削除パスワード

No.19482

Re:リストボックスで行ごとの太字設定
投稿者---エビス丸(2005/01/25 23:00:34)


>太字で描画した後、フォントを元に戻していないのではないですか?

あ・・・
そのような気がしてきました。
今自宅からですが、今日に限ってソースを持ち帰ってません^^;
明日、確認して報告します。

アドバイスありがとうございます。


この投稿にコメントする

削除パスワード

No.19493

Re:リストボックスで行ごとの太字設定
投稿者---エビス丸(2005/01/26 12:10:43)


こんにちは エビス丸です。
経過報告に参りました。

経過と言うくらいでうまくいってません。
以下に示したソースで試しているのですが、
太字にするためのコードをどこに入れて、
標準に戻すのをどこに入れればよいのかがわかりません。

WM_INITDIALOGでADDITEMの前に入れると、最後の設定が全体に適用され、
WM_DRAWITEMで入れると、リストボックスの中身が高速で点滅し、
アプリそのものが不安定になってしまいます。

どこでどのように挿入してやればよいでしょうか。
もう一度アドバイスをいただけないでしょうか。
よろしくお願いいたします。

#見づらいソースで申し訳ありません。

/******************************/
/* リストボックス作成         */
/******************************/
HWND CreateControlWindow(HWND hwndParent, int Left, int Top,int Width, int Height,
                         int dwExStyle ,int dwFlag ,LPCTSTR Caption, LPCTSTR ClassName,
                         HMENU ChildID,HINSTANCE hInstance)
{ 
   return CreateWindowEx(dwExStyle,ClassName,Caption,WS_CHILD | WS_VISIBLE | dwFlag    ,
                         Left, Top, Width, Height, hwndParent, ChildID, hInstance, NULL);
}

/******************************/
/* フォント設定               */
/******************************/
void SetFont(HWND hwnd,int Height,
             int Weight,BOOL Italic,BOOL Underlin,BOOL StrikeOut, LPCTSTR FontName)
{
  hFont=  (CreateFont(-12,0,0,0,Weight,Italic,Underlin,StrikeOut,SHIFTJIS_CHARSET,
                    OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,FontName));
  SendMessage(hwnd,WM_SETFONT,(WPARAM)hFont,TRUE); 
}

/******************************/
/* ダイアログプロシージャ     */
/*   ※WinMainは省略          */
/******************************/
BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
  LPDRAWITEMSTRUCT _DrawItem=(LPDRAWITEMSTRUCT)lp;
  LPCTSTR _buffer;
  HBRUSH   hBrush;
  HBITMAP  hBMP;
  //static HFONT hFont;
  int i;

  switch (msg) {
  case WM_INITDIALOG:                         
    //コントロール作成 
    hList=  CreateControlWindow(hDlg,7,340,150,160,WS_EX_CLIENTEDGE,
                                LBS_OWNERDRAWFIXED | LBS_SORT | LBS_NOINTEGRALHEIGHT | 
                                LBS_EXTENDEDSEL | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP,
                                "","LISTBOX",(HMENU)IDC_LIST,
                                (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE));
    //フォントの変更
    SetFont(hList,-12,FW_REGULAR,FALSE,FALSE,FALSE,"MS ゴシック");

    SendMessage(hList,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)"新規作成");
    SendMessage(hList,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)"ファイルを開く");
    SendMessage(hList,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)"上書き保存");
    SendMessage(hList,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)"---------------");
    SendMessage(hList,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)"アプリケーションの終了");
    //イメージリストを作成
    InitCommonControls();
    hImageList = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 2, 0);
    //イメージリストにビットマップを追加(100はリソースの番号を参照してください。)
    for (i=1;i<4;i++)
    {
      hBMP = LoadBitmap((HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE),(LPCTSTR)3000+i);
      ImageList_AddMasked(hImageList, hBMP, RGB(0,255,255));
      DeleteObject(hBMP);   
    }
    return TRUE;

  case WM_DRAWITEM:
    //リストボックスだったら
    if ((UINT) wp==IDC_LIST) {
      //描画対象の文字列取得
      SendMessage(hList,LB_GETTEXT,_DrawItem->itemID,(LPARAM)&_buffer);

      //選択状態かチェック
      if ((_DrawItem->itemState) & (ODS_SELECTED)) {       
        hBrush=CreateSolidBrush(RGB(255,0,0)); //ブラシ作成
        SetTextColor(_DrawItem->hDC,RGB(255,255,255)); //テキストのカラーを設定
        SetBkColor(_DrawItem->hDC,RGB(255,0,0)); //テキストの背景色を指定
      } else {
        hBrush=CreateSolidBrush(RGB(255,255,255)); //ブラシ作成
        SetTextColor(_DrawItem->hDC,RGB(0,0,0)); //テキストのカラーを設定
        SetBkColor(_DrawItem->hDC,RGB(255,255,255)); //テキストの背景色を指定
      }

      FillRect(_DrawItem->hDC,&_DrawItem->rcItem,hBrush); //バックグラウンドを塗りつぶす 
      DeleteObject(hBrush); //ブラシ削除
      TextOut(_DrawItem->hDC,_DrawItem->rcItem.left+22,_DrawItem->rcItem.top+3, 
       _buffer,strlen(_buffer)); //テキストを描画
                         //ビットマップを描画(アイテムのインデックスが超えた場合はなにもされない)    
      ImageList_Draw(hImageList,_DrawItem->itemID,_DrawItem->hDC, 1,
           _DrawItem->rcItem.top, ILD_TRANSPARENT);
    }
    return TRUE;
  }
}



この投稿にコメントする

削除パスワード

No.19495

Re:リストボックスで行ごとの太字設定
投稿者---shu(2005/01/26 12:30:50)


SetFont()の引き数の、int Weightが怪しい。


この投稿にコメントする

削除パスワード

No.19503

Re:リストボックスで行ごとの太字設定
投稿者---エビス丸(2005/01/26 14:05:00)


shuさんありがとうございます。
しかし、せっかくご指摘いただいたのにさっぱりわかりません。

3つ目のレスで申し上げた通り、int Weight に FW_BOLD を指定すると、太字になることは確認しています。
CreateFont()関数ももう一度確認しましたが、5番目の引数はint fnWeight と定義されているので、
設定内容が悪いようでもなさそうです。

 SetFont(…,FW_REGULAR,…);
  SendMessage(…);
 SetFont(…,FW_BOLD,…);
  SendMessage(…);
 SetFont(…,FW_REGULAR,…);
  SendMessage(…);
というのも違うようです。

もう一言、ご助言お願いいたします。

それから、上記ソースに訂正です。
DlgProc() の変数 static HFONT hFont は、本来グローバルの変数です。当然 static はつきません。
SetFont() の 
hFont = (CreateFont(-12,0,0,0,Weight,…);   は、
hFont = (CreateFont(Height,0,0,0,Weight,…); です



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧