BOOL CDragDrop6Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// "バージョン情報..." メニュー項目をシステム メニューへ追加します。
// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定
// TODO: 特別な初期化を行う時はこの場所に追加してください。
registry=0;
m_listC.InsertColumn(0,"拡張子",LVCFMT_CENTER,100);//リストボックスの初期設定
m_listC.InsertColumn(1,"移動先",LVCFMT_CENTER,360);
m_listC.InsertColumn(2,"チェックボタン",LVCFMT_CENTER,100);
DragAcceptFiles(TRUE);
reg_Number();
CString expand,movement;
CKodomo1Dlg dlg;
dlg.m_chk1=&chk;
CString CHK;
ReadReg(0, "Reg_Drop1","CHKBUTTON1");//レジストリ読み込み
ReadReg(1, "Reg_Drop2","CHKBUTTON2");
ReadReg(2, "Reg_Drop3","CHKBUTTON3");
ReadReg(3, "Reg_Drop4","CHKBUTTON4");
ReadReg(4, "Reg_Drop5","CHKBUTTON5");
ReadReg(5, "Reg_Drop6","CHKBUTTON6");
ReadReg(6, "Reg_Drop7","CHKBUTTON7");
CString Cname=getFileName(__argv[1]);
int index=-1;
CString kaku=strchr(__argv[1],'.');
CFileStatus FSts;
while((index=m_listC.GetNextItem(index,LVNI_ALL))!=-1){
CString str_index=m_listC.GetItemText(index,0);
CString str_index2=m_listC.GetItemText(index,1);
CString Rname=str_index2+"\\"+Cname;
CString r_chk=m_listC.GetItemText(index,2);
if(kaku=="."+str_index){
// n=index;
if(atoi(r_chk)==1){
MessageBox("上書きされます");
MoveFileEx(__argv[1],str_index2,MOVEFILE_REPLACE_EXISTING);
MoveFileEx(__argv[1],str_index2+"\\",MOVEFILE_REPLACE_EXISTING);
MoveFileEx(__argv[1],Rname,MOVEFILE_REPLACE_EXISTING);
}
else{
if(CFile::GetStatus(Rname,FSts)){
MoveFile(__argv[1],str_index2);
MoveFile(__argv[1],str_index2+"\\");
MoveFile(__argv[1],Rname);
}
else{
MoveFile(__argv[1],str_index2);
MoveFile(__argv[1],str_index2+"\\");
MoveFile(__argv[1],Rname);
}
}
}
}
このようにした結果exeアイコンへのドラッグ&ドロップは成功しました。
しかし通常起動(ビルド→実行 or アイコンをダブルクリック)すると"問題が発生しました。プログラムを
終了します"とでます。原因はどうやら
CString Cname=getFileName(__argv[1]);
のgetFileName(フルパスからファイル名を取り出すプログラム)の中にあるみたいで
char *CDragDrop6Dlg::getFileName(char *lpszPath)//全パスからファイル名を取り出す関数
{
char *lpszPtr=lpszPath;
while(*lpszPtr != '\0')//////////ここから先進みません。
{
//2バイト文字の先頭はスキップ
if(IsDBCSLeadByte(*lpszPtr) == 0)
{
//[\],[[/url],[:]を見つけたら現在地+1のポインタを保存
if((*lpszPtr == '\\') || (*lpszPtr == '/') || (*lpszPtr == ':'))
{
lpszPath=lpszPtr+1;
}
}
//次の文字へ
lpszPtr=CharNext(lpszPtr);
}
return lpszPath;
}
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
コメントの位置で止まります。どうして通常起動のときだけなるのか、何が悪いのかなど教えて下さい。