/**
@filename ProgressDialog.h
@brief Windows95でも使えるIProgressDialogの代わり
@since 2006/02/08
@author d金魚
@note
<PRE>
IProgressDialogはWindows2000,XPでしか使えない。
よってWindows95でも使えるProgress Dialogが必要と思った次第だ。

仕様：
プログレスバーが100%になっても終了しない。
キャンセルを押されるとダイアログが消える。
</PRE>
 */
#ifndef DKUTIL_GUI_WIN32_PROGRESS_DIALOG_H
#define DKUTIL_GUI_WIN32_PROGRESS_DIALOG_H


#include <windows.h>

#ifndef DKINGYOPROGRESSDIALOG_NOT_IMPORT





#include <dkutil_c/dkc_misc.h>



#ifdef DKINGYOPROGRESSDIALOG_EXPORTS
# define DKINGYOPROGRESSDIALOG_EXTERN extern "C" DKC_EXTERN_EXPORT
#else
#	define DKINGYOPROGRESSDIALOG_EXTERN extern "C" DKC_EXTERN_IMPORT
#endif


/**
@param percentage[in] パーセンテージを保存している変数へのポインタ
@param movetext[in] Text box内で動かす文字列（NULLでも良い）
@return 生成されたダイアログのWINDOW HANDLE。 NULLだとエラー
*/
DKINGYOPROGRESSDIALOG_EXTERN HWND WINAPI dkcProgressDialogDoModeless(unsigned int *percentage,const char *movetext,BOOL *isCancel);
DKINGYOPROGRESSDIALOG_EXTERN HWND WINAPI dkcProgressDialogDoModeless2(HWND hwnd,unsigned int *percentage,const char *movetext,BOOL *isCancel);

///Progress dialog領域を開放（DestroyWindow付き）必ず終了する時呼び出してください。
DKINGYOPROGRESSDIALOG_EXTERN BOOL WINAPI dkcProgressDialogFree(HWND wnd);

///流れる文字列を変更する時に呼び出してください。
DKINGYOPROGRESSDIALOG_EXTERN BOOL WINAPI dkcProgressDialogSetMoveText(HWND wnd,const char *movetext,unsigned int textboxsize);


#else
#	define DKC_INLINE __inline
#endif


///いわいるお決まりのShowWindowとUpdateWindowをやってくれます。
#ifdef __cplusplus
DKC_INLINE void WINAPI dkcProgressDialogShowAndUpdate(HWND hwnd,int nCmdSnow = SW_SHOW)
#else
DKC_INLINE void WINAPI dkcProgressDialogShowAndUpdate(HWND hwnd,int nCmdSnow)
#endif
{
	ShowWindow(hwnd,nCmdSnow);
	UpdateWindow(hwnd);
}
#ifdef __cplusplus
DKC_INLINE int WINAPI dkcProgressDialogMessageProcess(MSG *pmsg=NULL){
#else
DKC_INLINE int WINAPI dkcProgressDialogMessageProcess(MSG *pmsg){
#endif
	MSG msg;
	int t;
	if(!pmsg){
		pmsg = &msg;
	}
	t = GetMessage(pmsg, NULL, 0, 0);
	if(t) {
    TranslateMessage(pmsg);
    DispatchMessage(pmsg);
	}
	return t;
}


typedef HWND (WINAPI *DKC_PROGRESS_DIALOG_DO_MODELESS_F_TYPE)(unsigned int *percentage,const char *movetext,BOOL *isCancel);
typedef HWND (WINAPI *DKC_PROGRESS_DIALOG_DO_MODELESS2_F_TYPE)(HWND hwnd,unsigned int *percentage,const char *movetext,BOOL *isCancel);
typedef BOOL (WINAPI *DKC_PROGRESS_DIALOG_FREE_F_TYPE)(HWND wnd);
typedef BOOL (WINAPI *DKC_PROGRESS_DIALOG_SET_MOVE_TEXT_F_TYPE)(HWND wnd,const char *movetext,unsigned int textboxsize);


#endif