File Annotation

Not logged in
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: