ファイルのタイムスタンプを記憶し、変更後もワンクリックで元に戻すTimeStamp Keeper Ver.1.01を公開しました。
○Ver.1.01 – 2015/10/07
・起動済みプロセスがなくとも、Ctrlキー押下で最小化起動するように。
・ファイル名、更新日時の編集ができるように。
・エラーダイアログを表示しないように。
F2キーや「編集」ボタンから、ファイル名や更新日時を編集することができるようになりました。
DateTimePickerにミリ秒を直接表示するがフォーマットがないため、コールバックで文字列を制御する’XXX’を用い、WM_NOTIFY内でDTN_FORMATQUERY,DTN_FORMAT,DTN_WMKEYDOWNを処理しました。
case DTN_FORMATQUERY:{
HDC hDC=GetDC(handle());
HFONT hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
HFONT hOldFont=(HFONT)SelectObject(hDC,hFont);
if(lstrcmp(_T("XXX"),((LPNMDATETIMEFORMATQUERY)lparam)->pszFormat)==0){
GetTextExtentPoint32(hDC,
_T("999"),
3,
&((LPNMDATETIMEFORMATQUERY)lparam)->szMax);
}
SelectObject(hDC,hOldFont);
ReleaseDC(handle(),hDC);
break;
}
case DTN_FORMAT:{
wsprintf(const_cast<LPTSTR>(((LPNMDATETIMEFORMAT)lparam)->pszDisplay),
_T("%03d"),
m_wMilliseconds);
break;
}
case DTN_WMKEYDOWN:{
if(((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey==VK_DOWN){
if(m_wMilliseconds==0){
m_wMilliseconds=999;
}else{
m_wMilliseconds--;
}
}else if(((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey==VK_UP){
if(m_wMilliseconds>=999){
m_wMilliseconds=0;
}else{
m_wMilliseconds++;
}
}else if(((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey>='0'&&
((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey<='9'){
TCHAR szMilliseconds[4]={};
wsprintf(szMilliseconds,_T("%d"),m_wMilliseconds);
//入力された数字
TCHAR szNum[2]={((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey};
if(lstrlen(szMilliseconds)==3){
//3桁なら文字列をクリアし新たに数字を追加
m_wMilliseconds=_ttoi(szNum);
}else{
//3桁未満なら現在の文字列に数字を追加
lstrcat(szMilliseconds,szNum);
m_wMilliseconds=_ttoi(szMilliseconds);
}
}
InvalidateRect(getDlgItem(IDC_DATETIMEPICKER_FILE),NULL,TRUE);
break;
}
default:
break;
}