c2b7a98c21 2011-02-23 kinaba: private import std.string; c2b7a98c21 2011-02-23 kinaba: private import win32.ansi.windows; c2b7a98c21 2011-02-23 kinaba: private import win32.ansi.commctrl; c2b7a98c21 2011-02-23 kinaba: private import qbga32; c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: void process_messages() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: for( MSG msg; PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ); ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: TranslateMessage( &msg ); c2b7a98c21 2011-02-23 kinaba: DispatchMessage( &msg ); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: // 実装継承(w c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: class Dialog c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: public: c2b7a98c21 2011-02-23 kinaba: HWND hwnd() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: return handle; c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: protected: c2b7a98c21 2011-02-23 kinaba: void on_init() { MessageBox(null,"xxx",null,MB_OK); } c2b7a98c21 2011-02-23 kinaba: bool on_ok() { return false; } c2b7a98c21 2011-02-23 kinaba: bool on_cancel() { return false; } c2b7a98c21 2011-02-23 kinaba: bool on_command( UINT cmd ) { return false; } c2b7a98c21 2011-02-23 kinaba: bool on_message( UINT msg, WPARAM wp, LPARAM lp ) { return false; } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: extern(Windows) private static BOOL c2b7a98c21 2011-02-23 kinaba: static_dlg_proc( HWND dlg, UINT msg, WPARAM wp, LPARAM lp ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: if( msg == WM_INITDIALOG ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: SetWindowLong( dlg, GWL_USERDATA, lp ); c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: Dialog ptr = cast(Dialog) cast(Dialog*) lp; c2b7a98c21 2011-02-23 kinaba: ptr.handle = dlg; c2b7a98c21 2011-02-23 kinaba: ptr.on_init(); c2b7a98c21 2011-02-23 kinaba: return FALSE; c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: Dialog ptr = cast(Dialog) cast(Dialog*) GetWindowLong(dlg,GWL_USERDATA); c2b7a98c21 2011-02-23 kinaba: if( ptr is null ) c2b7a98c21 2011-02-23 kinaba: return FALSE; c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: if( msg == WM_COMMAND ) c2b7a98c21 2011-02-23 kinaba: if( LOWORD(wp) == IDOK ) c2b7a98c21 2011-02-23 kinaba: return ptr.on_ok(); c2b7a98c21 2011-02-23 kinaba: else if( LOWORD(wp) == IDCANCEL ) c2b7a98c21 2011-02-23 kinaba: return ptr.on_cancel(); c2b7a98c21 2011-02-23 kinaba: else c2b7a98c21 2011-02-23 kinaba: return ptr.on_command( LOWORD(wp) ); c2b7a98c21 2011-02-23 kinaba: return ptr.on_message(msg,wp,lp); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: protected: c2b7a98c21 2011-02-23 kinaba: HWND handle; c2b7a98c21 2011-02-23 kinaba: void BeginModeless( DLGTEMPLATE* dlg_template, HWND parent ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: CreateDialogIndirectParam( c2b7a98c21 2011-02-23 kinaba: g_hinst, c2b7a98c21 2011-02-23 kinaba: dlg_template, c2b7a98c21 2011-02-23 kinaba: parent, c2b7a98c21 2011-02-23 kinaba: &static_dlg_proc, c2b7a98c21 2011-02-23 kinaba: cast(LPARAM) cast(Dialog*) this c2b7a98c21 2011-02-23 kinaba: ); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: int BeginModal( DLGTEMPLATE* dlg_template, HWND parent ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: return DialogBoxIndirectParam( c2b7a98c21 2011-02-23 kinaba: g_hinst, c2b7a98c21 2011-02-23 kinaba: dlg_template, c2b7a98c21 2011-02-23 kinaba: parent, c2b7a98c21 2011-02-23 kinaba: &static_dlg_proc, c2b7a98c21 2011-02-23 kinaba: cast(LPARAM) cast(Dialog*) this c2b7a98c21 2011-02-23 kinaba: ); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: void set_item_text( int ID, char[] str ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: SetDlgItemText( handle, ID, toStringz(str) ); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: int send_item_msg( int ID, UINT msg, WPARAM wp=0, LPARAM lp=0 ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: return SendDlgItemMessage( handle, ID, msg, wp, lp ); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: //------------------------------------------------------------ c2b7a98c21 2011-02-23 kinaba: // #2025 [ファイルを操作中] c2b7a98c21 2011-02-23 kinaba: // 2006 : 書庫名 c2b7a98c21 2011-02-23 kinaba: // 2007 : ファイル名(パス無し) c2b7a98c21 2011-02-23 kinaba: // 2024 : プログレスバー c2b7a98c21 2011-02-23 kinaba: // 2 : キャンセルボタン c2b7a98c21 2011-02-23 kinaba: //------------------------------------------------------------ c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: class ProgressDlg : Dialog c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: this( DLGTEMPLATE* dlg_template, HWND parent ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: BeginModeless( dlg_template, parent ); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: void set_arcname ( char[] str ){ set_item_text( 2006, str ); } c2b7a98c21 2011-02-23 kinaba: void set_filename( char[] str ){ set_item_text( 2007, str ); } c2b7a98c21 2011-02-23 kinaba: void set_max( real m ) { max = m; } c2b7a98c21 2011-02-23 kinaba: void set_pos( real p ) { send_item_msg(2024,PBM_SETPOS,cast(int)(p/max*65535),0); } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: bool closed() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: return !alive; c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: void close() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: if( !closed ) c2b7a98c21 2011-02-23 kinaba: on_cancel(); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: protected: c2b7a98c21 2011-02-23 kinaba: bool alive = false; c2b7a98c21 2011-02-23 kinaba: real max = 1.0; c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: override void on_init() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: alive = true; c2b7a98c21 2011-02-23 kinaba: send_item_msg( 2024, PBM_SETRANGE, 0, MAKELPARAM(0,65535) ); c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: // センタリング c2b7a98c21 2011-02-23 kinaba: RECT rc,pr; c2b7a98c21 2011-02-23 kinaba: GetWindowRect( handle, &rc ); c2b7a98c21 2011-02-23 kinaba: HWND par = GetParent(handle); c2b7a98c21 2011-02-23 kinaba: if( par ) c2b7a98c21 2011-02-23 kinaba: GetWindowRect( par, &pr ); c2b7a98c21 2011-02-23 kinaba: else c2b7a98c21 2011-02-23 kinaba: SystemParametersInfo( SPI_GETWORKAREA, 0, &pr, 0 ); c2b7a98c21 2011-02-23 kinaba: SetWindowPos( handle, null, c2b7a98c21 2011-02-23 kinaba: pr.left + ( (pr.right-pr.left)-(rc.right-rc.left) )/2, c2b7a98c21 2011-02-23 kinaba: pr.top + ( (pr.bottom-pr.top)-(rc.bottom-rc.top) )/2, c2b7a98c21 2011-02-23 kinaba: 0, 0, SWP_NOSIZE|SWP_NOZORDER ); c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: // 表示 c2b7a98c21 2011-02-23 kinaba: ShowWindow(handle,SW_SHOW); c2b7a98c21 2011-02-23 kinaba: UpdateWindow(handle); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: override bool on_cancel() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: alive = false; c2b7a98c21 2011-02-23 kinaba: DestroyWindow(handle); c2b7a98c21 2011-02-23 kinaba: return true; c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: //------------------------------------------------------------ c2b7a98c21 2011-02-23 kinaba: // #2000 [ファイルの上書き確認] c2b7a98c21 2011-02-23 kinaba: // 2006 書庫内ファイル名 c2b7a98c21 2011-02-23 kinaba: // 2009 ファイルサイズ 564,590 Byte c2b7a98c21 2011-02-23 kinaba: // 2010 更新日時 2004\08\27 03:57:18 c2b7a98c21 2011-02-23 kinaba: // 2007 外部ファイル名 c2b7a98c21 2011-02-23 kinaba: // 2011 ファイルサイズ c2b7a98c21 2011-02-23 kinaba: // 2012 更新日時 c2b7a98c21 2011-02-23 kinaba: // c2b7a98c21 2011-02-23 kinaba: // 2002:上書き 2004:日付が新しければ上書き 2003:上書きしない c2b7a98c21 2011-02-23 kinaba: // c2b7a98c21 2011-02-23 kinaba: // 1: OKボタン c2b7a98c21 2011-02-23 kinaba: // 2005: 以降全てに適用ボタン c2b7a98c21 2011-02-23 kinaba: // 2: キャンセルボタン c2b7a98c21 2011-02-23 kinaba: //------------------------------------------------------------ c2b7a98c21 2011-02-23 kinaba: