hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
2017.05.11 21:51 添付ファイルのリンクを修正しました。
OwnerDraw/ODListBox - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

HSP3.0

オーナードローリストボックス

オーナードローを用いて独自概観のリストボックスを作ります。

サンプル1

1ファイルに定数とコードを書くと長くなるのでヘッダとソースと分けています。

  • ヘッダファイル
    filev3_042_OwnerDrawListBox_smp1.as
  • ソースファイル
    filev3_042_OwnerDrawListBox_smp1.hsp
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    |
    |
    |
    |
    -
    |
    |
    |
    !
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    !
     
     
     
     
     
     
     
     
     
     
    -
    -
    |
    |
    -
    |
    |
    |
    |
    |
    |
    |
    !
    !
    !
     
    
    ;=====================================================================
    ;	オーナードロー リストボックス						for hsp3.0a
    ;
    ;	2006/01/06 ... kz3
    ;=====================================================================
    #include "user32.as"
    #include "gdi32.as"
     
    // このサンプル用のヘッダファイル
    #include "v3_042_OwnerDrawListBox_smp1.as"
     
        // リストデータの作成
        sdim colname, MAXSTRING+1, ITEMNUMBER
        colname.0  = "Deep Pink", "Light Coral", "Dark Orange", "Golden Rod"
        colname.4  = "Pale Green", "Lawn Green", "Lime Green", "Medium Sea Green"
        colname.8  = "Dodger Blue", "Royal Blue", "Slate Blue", "Medium Blue"
        colname.12 = "Purple", "Dark Violet", "Copper", "Plum"
     
        dim bgcolor, ITEMNUMBER
        bgcolor.0  = RGB(255,20,147), RGB(240,128,128),RGB(255,140,0),RGB(218,165,32)
        bgcolor.4  = RGB(152,251,152), RGB(124,252,0),RGB(50,205,50),RGB(60,179,113)
        bgcolor.8  = RGB(30,144,255), RGB(65,105,225),RGB(106,90,205),RGB(0,0,205)
        bgcolor.12 = RGB(128,0,128), RGB(148,0,211),RGB(191,0,223),RGB(221,160,221)
     
        sdim szItem, MAXSTRING+1
     
        // 320x240 のオーナーウィンドウを作る
        screen 0, dspx, dspy, 0, dspx/2-160, dspy/2-120, 320, 240
            hOwner = hwnd
            cxOwner = ginfo_winx
            cyOwner = ginfo_winy
            cxList = cxOwner-MARGIN
            cyList = cyOwner-MARGIN
     
            syscolor 15: boxf
     
        // リストボックスを作る前に割込み指定
        oncmd gosub *On_Command,     WM_COMMAND
        oncmd gosub *On_MeasureItem, WM_MEASUREITEM
        oncmd gosub *On_DrawItem,    WM_DRAWITEM
     
        // リストボックス作成
        pos MARGIN/2, MARGIN/2
        style = WS_CHILD | WS_VISIBLE | WS_VSCROLL
        style |= LBS_NOTIFY | LBS_HASSTRINGS | LBS_OWNERDRAWFIXED
        winobj "LISTBOX", "", WS_EX_CLIENTEDGE, style, cxList, cyList, IDC_LISTBOX, 0
        hList = objinfo(stat,2)
     
        // リストボックスにテキスト追加
        sendmsg hList, WM_SETREDRAW, 0, 0
        repeat ITEMNUMBER
            sendmsg hList, LB_ADDSTRING, cnt, colname.cnt
        loop
        sendmsg hList, WM_SETREDRAW, 1, 0
     
        stop
     
    *On_MeasureItem
        dupptr _mis, lparam, 24, 4
        sign = _mis.4    
        return 1
     
    *On_DrawItem
        dupptr _dis, lparam, 48, 4
        dup itemID,  _dis.2: dup itemAct,  _dis.3
        dup itemSta, _dis.4: dup hCtrl,    _dis.5
        dup itemDC,   _dis.6
        dup rcLeft,  _dis.7: dup rcTop,    _dis.8
        dup rcRight, _dis.9: dup rcBottom, _dis.10
     
        sendmsg hList, LB_GETTEXT, itemID, varptr(szItem)
     
        if itemID\2{
            // AliceBlue
            CreatePen 0, 0, RGB(240, 248, 255)
            hPen = stat
            CreateSolidBrush RGB(240, 248 ,255)
            hBrush = stat
        }else{
            // LavenderBlush
            CreatePen 0, 0, RGB(255, 240, 245): hPen = stat
            CreateSolidBrush RGB(255, 240, 245): hBrush = stat
        }
     
        // 背景描画(後始末込み)
        SelectObject itemDC, hPen: holdPen = stat
        SelectObject itemDC, hBrush: holdBrush = stat
        Rectangle itemDC, rcLeft, rcTop, rcRight, rcBottom
        SelectObject itemDC, holdBrush
        SelectObject itemDC, holdPen
        DeleteObject hBrush
        DeleteObject hPen
     
        // 選択項目には●マークを描画(左右)
        if itemSta & ODS_SELECTED{
            CreatePen 0, 0, bgcolor(itemID): hPen = stat
            CreateSolidBrush bgcolor(itemID): hBrush = stat
            SelectObject itemDC, hPen: holdPen = stat
            SelectObject itemDC, hBrush: holdBrush = stat
            Ellipse itemDC, rcLeft, rcTop, rcLeft+sign, rcBottom
            Ellipse itemDC, rcRight-sign, rcTop, rcRight, rcBottom
            SelectObject itemDC, holdBrush
            SelectObject itemDC, holdPen
            DeleteObject hBrush
            DeleteObject hPen
        }
     
        // 項目テキストを描画
        SetTextColor itemDC, RGB(0,0,0)
        SetBkMode itemDC, TRANSPARENT
        rc = rcLeft+sign+1, rcTop, rcRight-signa-1, rcBottom
        DrawText itemDC, szItem, -1, varptr(rc), $00008000
     
        return 1
     
    *On_Command
        if (wparam & $FFFF) = IDC_LISTBOX{
            if (wparam>>16&$FFFF) = LBN_SELCHANGE{
                sendmsg hList, LB_GETCURSEL, 0, 0
                sel = stat
                if sel ! -1{
                    // 選択項目をタイトルバーに表示
                    sendmsg hList, LB_GETTEXT, sel, varptr(szItem)
                    title szItem
                    // オーナーウィンドウ塗りつぶし
                    col = bgcolor(sel)
                    color col&$FF, col>>8&$FF, col>>16&$FF
                    boxf
                }
            }
        }
        return 0

コメント

  • モジュール化まで気が回らない^^; -- kz3 2006-01-07 (土) 12:55:35
  • 整理中。 -- kz3 2006-01-07 (土) 15:58:22
  • 続きはまた明日〜^^ -- kz3 2006-01-07 (土) 16:10:18
  • といいつつ・・・。
    描画領域は得られるので左右にアイコンわけないですね。 -- kz3 2006-01-07 (土) 16:50:41
  • ヘッダファイルの悪い見本にならないように多重インクルード防止コードを追加しました。 -- kz3 2006-01-08 (日) 10:49:06

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:31:36 (2436d)