class LboxDTPicker : public LboxWintool


  コンストラクタ




ダイアログ上のコントロールの一つとして使用する事を想定しています。その為、位置指定を簡単にする為にデザイナ上ではタ゜ミーのエディットコントロールを貼り付けて、そのウインドウハンドルを渡すようにしています。
( エディットコントロールのタブオーダーが使用されます )

bNoData は、true にすると、日付の横にチェックボックスが表示され、通常はチェックされています。
このチェックを外すと、日付が灰色になって変更不能になって未入力扱いにする事ができます。入力可能にするには、もう一度チェックするかカレンダーを開くと元に戻ります。

必須入力の日付項目であれば、bNoData は false にします。

  

Dtp = new LboxDTPicker(
	hDlg,
	GetDlgItem( hDlg, IDC_EDIT1 ),
	true
);
  

  

// *********************************************************
// 拡張コンストラクタ
// *********************************************************
LboxDTPicker::LboxDTPicker( HWND hOwner, HWND hBase, BOOL bNoData )
{
	BaseEdit = new LboxEdit( hBase );
	this->bNoData = bNoData;
		
	BaseEdit->Hide( );
	BaseEdit->Disable();

	RECT rt;
	POINT pt;
	GetWindowRect( hBase, &rt );
	pt.x = rt.left;
	pt.y = rt.top;
	ScreenToClient( hOwner, &pt );

	int nW,nH;
	nW = BaseEdit->Width();
	nH = BaseEdit->Height();

	if ( bNoData ) {
		this->hWnd = 
			CreateWindowEx(
				0,
				DATETIMEPICK_CLASS,
				"DateTime",
				WS_BORDER |
				WS_CHILD |
				WS_VISIBLE | WS_TABSTOP |
				DTS_SHOWNONE,
				pt.x, pt.y, nW, nH,
				hOwner,
				NULL,
				LboxGetInstance( hOwner ),
				NULL
			);
	}
	else {
		this->hWnd = 
			CreateWindowEx(
				0,
				DATETIMEPICK_CLASS,
				"DateTime",
				WS_BORDER |
				WS_CHILD |
				WS_VISIBLE | WS_TABSTOP,
				pt.x, pt.y, nW, nH,
				hOwner,
				NULL,
				LboxGetInstance( hOwner ),
				NULL
			);
	}

	if ( this->hWnd != NULL ) {
		SetWindowPos(
			this->hWnd,
			hBase,
			0,0,0,0,
			SWP_NOMOVE | SWP_NOSIZE
		);
	}

}

LboxDTPicker::LboxDTPicker()
{

}

LboxDTPicker::~LboxDTPicker()
{
	delete BaseEdit;
}
  







  GetDateString




未入力扱いになっている時は、空文字列を返します

  

// *********************************************************
// 選択された日付文字列の取得
// 戻り値 : 無し
// *********************************************************
BOOL LboxDTPicker::GetDateString( LboxString *LString )
{
	SYSTEMTIME st;

	if ( GDT_NONE != DateTime_GetSystemtime( this->hWnd, &st ) ) {
		LString->Printf( "%04d/%02d/%02d", st.wYear, st.wMonth, st.wDay );
		return true;
	}
	else {
		LString->SetChar( 0, 0 );
		return false;
	}
}
  

  GetDateSystemtime

  

// *********************************************************
// 選択された日付の SYSTEMTIME の取得
// 戻り値 : 無し
// *********************************************************
BOOL LboxDTPicker::GetDateSystemtime( SYSTEMTIME *st )
{
	if ( GDT_NONE == DateTime_GetSystemtime( this->hWnd, st ) ) {
		ZeroMemory( st, sizeof( SYSTEMTIME ) );
		return false;
	}
	else {
		return true;
	}
}
  

  SetDateString

  

// *********************************************************
// 文字列日付を設定
// 戻り値 : 設定できない日付を指定すると false
// *********************************************************
BOOL LboxDTPicker::SetDateString( LboxString *LString, LPTSTR lpDelim )
{
	return SetDateString( LString->szLboxString, lpDelim );
}
BOOL LboxDTPicker::SetDateString( LPTSTR lpDate, LPTSTR lpDelim )
{
	SYSTEMTIME st;
	BOOL bRet;
	LboxToken *Token;
	Token = new LboxToken();
	Token->CreateToken( lpDate, lpDelim );

	if ( this->bNoData ) {
		if ( Token->nCount != 3 ) {
			ZeroMemory( &st, sizeof( SYSTEMTIME ) );
			DateTime_SetSystemtime( this->hWnd, GDT_NONE, &st );
		}
		else {
			ZeroMemory( &st, sizeof( SYSTEMTIME ) );
			st.wYear = atoi( Token->Token[0] );
			st.wMonth = atoi( Token->Token[1] );
			st.wDay = atoi( Token->Token[2] );
			bRet = DateTime_SetSystemtime( this->hWnd, GDT_VALID, &st );
			if ( !bRet ) {
				DateTime_SetSystemtime( this->hWnd, GDT_NONE, &st );
			}
		}
		bRet = true;
	}
	else {
		if ( Token->nCount != 3 ) {
			bRet = false;
		}
		else {
			ZeroMemory( &st, sizeof( SYSTEMTIME ) );
			st.wYear = atoi( Token->Token[0] );
			st.wMonth = atoi( Token->Token[1] );
			st.wDay = atoi( Token->Token[2] );
			bRet = DateTime_SetSystemtime( this->hWnd, GDT_VALID, &st );
		}
	}

	delete Token;

	return bRet;
}
  

  SetDateSystemtime

  

// *********************************************************
// 日付の SYSTEMTIME の設定
// 戻り値 : 設定できない日付を指定すると false
// *********************************************************
BOOL LboxDTPicker::SetDateSystemtime( SYSTEMTIME *st )
{
	BOOL bRet;

	if ( this->bNoData ) {
		if ( st->wYear == 0 && st->wMonth == 0 && st->wDay == 0 ) {
			DateTime_SetSystemtime( this->hWnd, GDT_NONE, st );
		}
		else {
			bRet = DateTime_SetSystemtime( this->hWnd, GDT_VALID, st );
			if ( !bRet ) {
				DateTime_SetSystemtime( this->hWnd, GDT_NONE, st );
			}
		}
		return true;
	}
	else {
		bRet = DateTime_SetSystemtime( this->hWnd, GDT_VALID, st );
		return bRet;
	}
}
  

  Notify

  

case WM_NOTIFY:
	if ( Dtp != NULL ) {
		Dtp->Notify( hDlg, lParam );
	}
	break;

case LBOX_DTP_CHANGE:
	Dtp->GetDateString( Buff );
	Dlg->StatusSetText(  Buff );
	break;

case LBOX_DTP_KILLFOCUS:
	Dlg->StatusSetText( "KillFocus" );
	break;

case LBOX_DTP_SETFOCUS:
	Dlg->StatusSetText( "SetFocus" );
	break;
  

  

// *********************************************************
// WM_NOTIFYメッセージを取得してユーザメッセージを送る
// 戻り値 : メッセージ( 0 の時は対象外 )
// *********************************************************
UINT LboxDTPicker::Notify( HWND hTarget, LPARAM lParam )
{
	HWND hCur;
	LPNMHDR lpNmhdr;

	lpNmhdr = (LPNMHDR)lParam;
	hCur = lpNmhdr->hwndFrom;

	// メッセ−ジがこのオブジェクトである場合
	if ( hCur == this->hWnd ) {
	   if ( lpNmhdr->code == DTN_DATETIMECHANGE ) {
		SendMessage( hTarget, LBOX_DTP_CHANGE, (WPARAM)hCur, 0 );
	   }
	   if ( lpNmhdr->code == NM_KILLFOCUS  ) {
		SendMessage( hTarget, LBOX_DTP_KILLFOCUS, (WPARAM)hCur, 0 );
	   }
	   if ( lpNmhdr->code == NM_SETFOCUS  ) {
		SendMessage( hTarget, LBOX_DTP_SETFOCUS, (WPARAM)hCur, 0 );
	   }

	   return lpNmhdr->code;
	}

	return 0;
}
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[cmstd]
CCBot/2.0 (https://commoncrawl.org/faq/)
25/01/22 14:37:12
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube