ダイアログでエディットボックスとスピンコントロールを作る際に、
スピンコントロールのSet Buddy IntegerをFalseにしないといけない。
これを忘れると、関連付けたエディットボックスがスピンコントロールのInt型で扱われるため、
浮動小数点にならないの注意。
あとは
float value;
m_xcSpin.SetPos32( value*10 );
とか
float value = m_xcSpin.GetPos32();
とか使えば大丈夫。
2011年12月29日木曜日
2011年12月17日土曜日
パスからファイル名の取得
MFCのコードを書いておく。
ユニコードなので、wcharからcharヘの変換とかしてる。
CString filename = PathFindFileName(CString string);
を使ってる。
または,分解・結合可能。
// 分解
char drive[8], dir[256], filename[256],ext[8];
_splitpath(str.c_str(), drive, dir, filename, ext);
// 結合
char dirpath[256];
_makepath(dirpath, drive, dir,NULL,NULL);
void CMainFrame::OnOpenFile()
{
CString filter("JPEG Files (*.jpg;*.jpeg)|*.jpg; *.jpeg|| BMP files (*.bmp)| *.bmp||");
CString filePath, strBuf;
CString filename;
POSITION pos = NULL;
CFileDialog selDlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR, filter);
int err = 0, lbErr = 0;
vector<char*> filenames;
// ファイル名リスト用メモリ確保
if (!err)
{
try
{
selDlg.GetOFN().lpstrFile = strBuf.GetBuffer(MAX_PATH *100);
selDlg.GetOFN().nMaxFile = MAX_PATH *100;
}
catch (...) {err = 1;}
}
if (!err) if (selDlg.DoModal() != IDOK) err = 1;
if (!err) if ((pos = selDlg.GetStartPosition()) == NULL) err = 1;
if (!err)
{
while (pos)
{
filePath = selDlg.GetNextPathName(pos);
if (!err)
{
_bstr_t bSrc(filePath);
char tmp_filepath[256];
//strcpy(m_pathname, sizeof(m_pathname), pathname);
//int len = WideCharToMultiByte(CP_UTF8, 0, bSrc, -1, NULL, 0,NULL,NULL);
WideCharToMultiByte(CP_UTF8, 0, bSrc, -1, tmp_filepath, sizeof(tmp_filepath), NULL, NULL);
string str = tmp_filepath;
m_fullpathes.push_back(str);
// ファイル名のみ抽出する
CString Filename = PathFindFileName(filePath);
_bstr_t bSrc_filename(Filename);
char tmp_filename[256];
////strcpy(m_pathname, sizeof(m_pathname), pathname);
////int len = WideCharToMultiByte(CP_UTF8, 0, bSrc, -1, NULL, 0,NULL,NULL);
WideCharToMultiByte(CP_UTF8, 0, bSrc_filename, -1, tmp_filename, sizeof(tmp_filename), NULL, NULL);
string str_filename = tmp_filename;
m_filenames.push_back(str_filename);
}
if (err) break;
}
UpdateData(FALSE);
}
UpdateData(false);
}
ユニコードなので、wcharからcharヘの変換とかしてる。
CString filename = PathFindFileName(CString string);
を使ってる。
または,分解・結合可能。
// 分解
char drive[8], dir[256], filename[256],ext[8];
_splitpath(str.c_str(), drive, dir, filename, ext);
// 結合
char dirpath[256];
_makepath(dirpath, drive, dir,NULL,NULL);
void CMainFrame::OnOpenFile()
{
CString filter("JPEG Files (*.jpg;*.jpeg)|*.jpg; *.jpeg|| BMP files (*.bmp)| *.bmp||");
CString filePath, strBuf;
CString filename;
POSITION pos = NULL;
CFileDialog selDlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR, filter);
int err = 0, lbErr = 0;
vector<char*> filenames;
// ファイル名リスト用メモリ確保
if (!err)
{
try
{
selDlg.GetOFN().lpstrFile = strBuf.GetBuffer(MAX_PATH *100);
selDlg.GetOFN().nMaxFile = MAX_PATH *100;
}
catch (...) {err = 1;}
}
if (!err) if (selDlg.DoModal() != IDOK) err = 1;
if (!err) if ((pos = selDlg.GetStartPosition()) == NULL) err = 1;
if (!err)
{
while (pos)
{
filePath = selDlg.GetNextPathName(pos);
if (!err)
{
_bstr_t bSrc(filePath);
char tmp_filepath[256];
//strcpy(m_pathname, sizeof(m_pathname), pathname);
//int len = WideCharToMultiByte(CP_UTF8, 0, bSrc, -1, NULL, 0,NULL,NULL);
WideCharToMultiByte(CP_UTF8, 0, bSrc, -1, tmp_filepath, sizeof(tmp_filepath), NULL, NULL);
string str = tmp_filepath;
m_fullpathes.push_back(str);
// ファイル名のみ抽出する
CString Filename = PathFindFileName(filePath);
_bstr_t bSrc_filename(Filename);
char tmp_filename[256];
////strcpy(m_pathname, sizeof(m_pathname), pathname);
////int len = WideCharToMultiByte(CP_UTF8, 0, bSrc, -1, NULL, 0,NULL,NULL);
WideCharToMultiByte(CP_UTF8, 0, bSrc_filename, -1, tmp_filename, sizeof(tmp_filename), NULL, NULL);
string str_filename = tmp_filename;
m_filenames.push_back(str_filename);
}
if (err) break;
}
UpdateData(FALSE);
}
UpdateData(false);
}
登録:
投稿 (Atom)