5128eecc9f 2011-02-23 kinaba: //--- K.I.LIB --- 5128eecc9f 2011-02-23 kinaba: // kl_wnd.h : window information manager 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #ifndef AFX_KIWINDOW_H__26105B94_1E36_42FA_8916_C2F7FB9EF994__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: #define AFX_KIWINDOW_H__26105B94_1E36_42FA_8916_C2F7FB9EF994__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiWindow : Windowの簡単な管理 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiWindow 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: friend void kilib_startUp(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- グローバルな初期化処理など --------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: static void init(); 5128eecc9f 2011-02-23 kinaba: static void finish(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: //-- 外向きインターフェイス -------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 関連付けられているHWND 5128eecc9f 2011-02-23 kinaba: HWND hwnd() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return m_hWnd; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // そのWindow用にアクセラレータをロード 5128eecc9f 2011-02-23 kinaba: void loadAccel( UINT id ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ウインドウがまだ残っているかどうかチェック 5128eecc9f 2011-02-23 kinaba: bool isAlive() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: if( !m_hWnd ) 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: if( ::IsWindow(m_hWnd) ) 5128eecc9f 2011-02-23 kinaba: return true; 5128eecc9f 2011-02-23 kinaba: m_hWnd = NULL; 5128eecc9f 2011-02-23 kinaba: return false; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 親 5128eecc9f 2011-02-23 kinaba: kiWindow* parent() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return kiwnd( ::GetParent( hwnd() ) ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // メッセージ送信 5128eecc9f 2011-02-23 kinaba: int sendMsg( UINT msg, WPARAM wp=0, LPARAM lp=0 ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return ::SendMessage( hwnd(), msg, wp, lp ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // [static] キューにあるメッセージを全て処理 5128eecc9f 2011-02-23 kinaba: static void msg(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // [static] メッセージループをまわす。 5128eecc9f 2011-02-23 kinaba: enum msglooptype {PEEK, GET}; 5128eecc9f 2011-02-23 kinaba: static void msgLoop( msglooptype type = GET ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // [static] Windowを強制的に front へ 5128eecc9f 2011-02-23 kinaba: static void setFront( HWND wnd ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // [static] Windowを中央へ 5128eecc9f 2011-02-23 kinaba: static void setCenter( HWND wnd, HWND rel=NULL ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // [static] HWND -> kiWindow ( もしあれば ) 5128eecc9f 2011-02-23 kinaba: static kiWindow* kiwnd( HWND wnd ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: kiWindow* ptr = (kiWindow*)::GetWindowLong( wnd, GWL_USERDATA ); 5128eecc9f 2011-02-23 kinaba: if( !ptr ) return NULL; 5128eecc9f 2011-02-23 kinaba: if( ::IsBadCodePtr((FARPROC)&ptr) ) return NULL; 5128eecc9f 2011-02-23 kinaba: return ptr; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: //-- 派生クラス向け ----------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 派生クラスは、作成直前にコレを呼ぶこと。 5128eecc9f 2011-02-23 kinaba: static void preCreate( kiWindow* wnd ) 5128eecc9f 2011-02-23 kinaba: { st_pCurInit = wnd; } 5128eecc9f 2011-02-23 kinaba: // 破棄直前にコレを呼ぶこと。 5128eecc9f 2011-02-23 kinaba: void detachHwnd(); 5128eecc9f 2011-02-23 kinaba: // いったんGET/POSTメッセージループを停止 5128eecc9f 2011-02-23 kinaba: static void loopbreak() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: loopbreaker = true; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- 内部処理 ------------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ウインドウハンドル設定 5128eecc9f 2011-02-23 kinaba: static LRESULT CALLBACK CBTProc( int code, WPARAM wp, LPARAM lp ); 5128eecc9f 2011-02-23 kinaba: static HHOOK st_hHook; 5128eecc9f 2011-02-23 kinaba: static kiWindow* st_pCurInit; 5128eecc9f 2011-02-23 kinaba: void setHwnd( HWND wnd ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: m_hWnd = wnd; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ウインドウ情報保持用変数 5128eecc9f 2011-02-23 kinaba: HWND m_hWnd; 5128eecc9f 2011-02-23 kinaba: HACCEL m_hAccel; 5128eecc9f 2011-02-23 kinaba: // ダイアログメッセージ 5128eecc9f 2011-02-23 kinaba: virtual bool isDlgMsg( MSG* msg ) 5128eecc9f 2011-02-23 kinaba: { return false; } 5128eecc9f 2011-02-23 kinaba: // GETループ一時抜けだし 5128eecc9f 2011-02-23 kinaba: static bool loopbreaker; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: 5128eecc9f 2011-02-23 kinaba: kiWindow(); 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: virtual ~kiWindow(); 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiDialog : DialogをkiWindowとして管理する 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiDialog : public kiWindow 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: //-- 外向きインターフェイス -------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // モーダルダイアログとして実行 5128eecc9f 2011-02-23 kinaba: virtual void doModal( HWND parent=NULL ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // モードレスダイアログとして作成 5128eecc9f 2011-02-23 kinaba: virtual void createModeless( HWND parent=NULL ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 終了コード取得 5128eecc9f 2011-02-23 kinaba: UINT getEndCode() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return m_EndCode; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // モーダルか否か 5128eecc9f 2011-02-23 kinaba: bool isModal() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return m_bStateModal; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ダイアログアイテム 5128eecc9f 2011-02-23 kinaba: int sendMsgToItem( UINT id, UINT msg, WPARAM wp=0, LPARAM lp=0 ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return ::SendDlgItemMessage( hwnd(), id, msg, wp, lp ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: HWND item( UINT id ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return ::GetDlgItem( hwnd(), id ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: //-- 派生クラス向け ----------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // リソースIDで初期化 5128eecc9f 2011-02-23 kinaba: kiDialog( UINT id ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // リソースID取得 5128eecc9f 2011-02-23 kinaba: UINT getRsrcID() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return m_Rsrc; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 終了コードをセット 5128eecc9f 2011-02-23 kinaba: void setEndCode( UINT endcode ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: m_EndCode = endcode; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // モーダルか否かのフラグ"のみ"を切替 5128eecc9f 2011-02-23 kinaba: void setState( bool modal ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: m_bStateModal = modal; 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 終了コードをセットして、終了する( IDOK を渡しても onOK() は呼ばれないことに注意! ) 5128eecc9f 2011-02-23 kinaba: virtual void end( UINT endcode ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // コマンド・メッセージ発生時に呼ばれる 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // OK -> onOK -> if true end(IDOK) 5128eecc9f 2011-02-23 kinaba: virtual bool onOK() {return true;} 5128eecc9f 2011-02-23 kinaba: // 取消 -> onCancel -> if true end(IDCANCEL) 5128eecc9f 2011-02-23 kinaba: virtual bool onCancel() {return true;} 5128eecc9f 2011-02-23 kinaba: // WM_INITDIALOG -> onInit 5128eecc9f 2011-02-23 kinaba: virtual BOOL onInit() {return FALSE;} 5128eecc9f 2011-02-23 kinaba: // WM_???? -> proc 5128eecc9f 2011-02-23 kinaba: virtual BOOL CALLBACK proc( UINT msg, WPARAM wp, LPARAM lp ) {return FALSE;} 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- 内部処理 ------------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: UINT m_EndCode; 5128eecc9f 2011-02-23 kinaba: UINT m_Rsrc; 5128eecc9f 2011-02-23 kinaba: bool m_bStateModal; 5128eecc9f 2011-02-23 kinaba: bool isDlgMsg( MSG* msg ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: return (FALSE!=::IsDialogMessage( hwnd(), msg )); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: static BOOL CALLBACK commonDlg( HWND dlg, UINT msg, WPARAM wp, LPARAM lp ); 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiPropSheet : PropertySheetをkiWindowとして管理する。 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #define IDAPPLY (0x3021) 5128eecc9f 2011-02-23 kinaba: #define ID_KIPS_HELP (0x0009) 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiPropSheetPage : public kiDialog 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: friend class kiPropSheet; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: //-- 派生クラス向け ---------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ダイアログやアイコンのIDで初期化 5128eecc9f 2011-02-23 kinaba: kiPropSheetPage( UINT dlgid ) 5128eecc9f 2011-02-23 kinaba: : kiDialog( dlgid ), m_hIcon( NULL ) {} 5128eecc9f 2011-02-23 kinaba: void setIcon( HICON h ) 5128eecc9f 2011-02-23 kinaba: { m_hIcon = h; } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // OK/適用 -> page::onOK -> sheet::onOK -> (if ok 終了) 5128eecc9f 2011-02-23 kinaba: // virtual bool onOK() 5128eecc9f 2011-02-23 kinaba: // WM_INITDIALOG 5128eecc9f 2011-02-23 kinaba: // virtual BOOL onInit() 5128eecc9f 2011-02-23 kinaba: // その他 5128eecc9f 2011-02-23 kinaba: // virtual BOOL CALLBACK proc( UINT msg, WPARAM wp, LPARAM lp ) 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- 内部処理 ------------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void end( UINT endcode ) {} 5128eecc9f 2011-02-23 kinaba: void setInfo( PROPSHEETPAGE* p ); 5128eecc9f 2011-02-23 kinaba: HICON m_hIcon; 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiPropSheet : public kiDialog 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: friend class kiPropSheetPage; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: //-- 外向きインターフェイス -------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // モーダルダイアログとして実行 5128eecc9f 2011-02-23 kinaba: void doModal( HWND parent ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // モードレスダイアログとして作成 5128eecc9f 2011-02-23 kinaba: void createModeless( HWND parent ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: //-- 派生クラス向け ---------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // コンストラクタ辺りで↓これをいじるべし 5128eecc9f 2011-02-23 kinaba: PROPSHEETHEADER m_Header; 5128eecc9f 2011-02-23 kinaba: kiArray<kiPropSheetPage*> m_Pages; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 終了 5128eecc9f 2011-02-23 kinaba: void end( UINT endcode ); 5128eecc9f 2011-02-23 kinaba: // 5128eecc9f 2011-02-23 kinaba: void sendOK2All() 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: for( unsigned int i=0;i!=m_Pages.len(); i++ ) 5128eecc9f 2011-02-23 kinaba: if( m_Pages[i]->isAlive() ) 5128eecc9f 2011-02-23 kinaba: m_Pages[i]->onOK(); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // OK/適用 -> page::onOK -> sheet::onOK -> (if ok 終了) 5128eecc9f 2011-02-23 kinaba: // virtual void onOK() 5128eecc9f 2011-02-23 kinaba: // キャンセル -> sheet::onCancel -> 終了 5128eecc9f 2011-02-23 kinaba: // virtual void onCancel() 5128eecc9f 2011-02-23 kinaba: // PSCB_INITIALIZED 5128eecc9f 2011-02-23 kinaba: // virtual BOOL onInit() 5128eecc9f 2011-02-23 kinaba: // 適用 5128eecc9f 2011-02-23 kinaba: virtual void onApply() {} 5128eecc9f 2011-02-23 kinaba: // ヘルプ 5128eecc9f 2011-02-23 kinaba: virtual void onHelp() {} 5128eecc9f 2011-02-23 kinaba: // その他コマンド 5128eecc9f 2011-02-23 kinaba: virtual void onCommand( UINT id ) {} 5128eecc9f 2011-02-23 kinaba: // ファイルドロップ 5128eecc9f 2011-02-23 kinaba: virtual void onDrop( HDROP hdrop ) {} 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- 内部処理 --------------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void begin(); 5128eecc9f 2011-02-23 kinaba: bool m_bStateModal; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: static kiPropSheet* st_CurInitPS; 5128eecc9f 2011-02-23 kinaba: WNDPROC m_DefProc; 5128eecc9f 2011-02-23 kinaba: bool isDlgMsg( MSG* msg ) 5128eecc9f 2011-02-23 kinaba: { return (FALSE!=PropSheet_IsDialogMessage( hwnd(),msg )); } 5128eecc9f 2011-02-23 kinaba: static int CALLBACK main_initProc( HWND dlg, UINT msg, LPARAM lp ); 5128eecc9f 2011-02-23 kinaba: static LRESULT CALLBACK main_cmmnProc( HWND dlg, UINT msg, WPARAM wp, LPARAM lp ); 5128eecc9f 2011-02-23 kinaba: static BOOL CALLBACK page_cmmnProc( HWND dlg, UINT msg, WPARAM wp, LPARAM lp ); 5128eecc9f 2011-02-23 kinaba: static UINT CALLBACK page_initProc( HWND dlg, UINT msg, LPPROPSHEETPAGE ppsp ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: 5128eecc9f 2011-02-23 kinaba: kiPropSheet(); 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: ~kiPropSheet() 5128eecc9f 2011-02-23 kinaba: { for( unsigned int i=0; i!=m_Pages.len(); i++ ) delete m_Pages[i]; } 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiListView : ListViewコントロールの簡単なラッパ 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiListView 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: kiListView( kiDialog* dlg, UINT id ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: m_hWnd = ::GetDlgItem( dlg->hwnd(), id ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void insertColumn( int y, const char* title, 5128eecc9f 2011-02-23 kinaba: int width=100, int fmt=LVCFMT_LEFT ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: LVCOLUMN col; 5128eecc9f 2011-02-23 kinaba: col.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH; 5128eecc9f 2011-02-23 kinaba: col.pszText = const_cast<char*>(title); 5128eecc9f 2011-02-23 kinaba: col.cx = width; 5128eecc9f 2011-02-23 kinaba: col.fmt = fmt; 5128eecc9f 2011-02-23 kinaba: ::SendMessage( m_hWnd, LVM_INSERTCOLUMN, y, (LPARAM)&col ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void insertItem( int x, const char* str, LPARAM param=0, int iImage=-1 ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: LVITEM item; 5128eecc9f 2011-02-23 kinaba: item.mask = LVIF_TEXT | LVIF_PARAM | (iImage!=-1 ? LVIF_IMAGE : 0); 5128eecc9f 2011-02-23 kinaba: item.pszText = const_cast<char*>(str); 5128eecc9f 2011-02-23 kinaba: item.iItem = x; 5128eecc9f 2011-02-23 kinaba: item.iSubItem = 0; 5128eecc9f 2011-02-23 kinaba: item.iImage = iImage; 5128eecc9f 2011-02-23 kinaba: item.lParam = param; 5128eecc9f 2011-02-23 kinaba: ::SendMessage( m_hWnd, LVM_INSERTITEM, 0, (LPARAM)&item ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void setSubItem( int x, int y, const char* str ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: LVITEM item; 5128eecc9f 2011-02-23 kinaba: item.mask = LVIF_TEXT; 5128eecc9f 2011-02-23 kinaba: item.pszText = const_cast<char*>(str); 5128eecc9f 2011-02-23 kinaba: item.iItem = x; 5128eecc9f 2011-02-23 kinaba: item.iSubItem = y; 5128eecc9f 2011-02-23 kinaba: ::SendMessage( m_hWnd, LVM_SETITEM, 0, (LPARAM)&item ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: void setImageList( HIMAGELIST Large, HIMAGELIST Small ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: ::SendMessage( m_hWnd, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)Large ); 5128eecc9f 2011-02-23 kinaba: ::SendMessage( m_hWnd, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)Small ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: 5128eecc9f 2011-02-23 kinaba: HWND m_hWnd; 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #endif