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 を返すとコントロールに設定したフォーカスは失われません。 }コメントの位置で止まります。どうして通常起動のときだけなるのか、何が悪いのかなど教えて下さい。