• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++、MFCでSDIでアプリ作成中)

VC++、MFCでSDIでアプリ作成中の問題

このQ&Aのポイント
  • VC++、MFCでSDIでアプリ作成中ですが、ドラッグ&ドロップしたファイルを開くことができません。
  • C○○View.cppのRead(arg[i])でうまく読み込めません。
  • どのタイミングで読み込めばいいかがわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • ohtawa
  • ベストアンサー率23% (9/38)
回答No.1

InitInstance SDI コマンドライン でググってみてはいかがでしょうか

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VC++でMFCアプリ作成中です。

    MFCの既存のフレームで、「最近使ったファイル」という欄があります。 これを選んだ際に、指定したプログラムでそのファイルを開きたいのですが、うまくいきません。 どうすればよろしいでしょうか? HogeView.cpp ...(省略) /*************************************** OnOpenRecentFileのオーバーライド ***************************************/ BOOL CWinApp::OnOpenRecentFile(UINT nID) { ASSERT_VALID(this); ASSERT(m_pRecentFileList != NULL); ASSERT(nID >= ID_FILE_MRU_FILE1); ASSERT(nID < ID_FILE_MRU_FILE1 + (UINT)m_pRecentFileList->GetSize()); int nIndex = nID - ID_FILE_MRU_FILE1; ASSERT((*m_pRecentFileList)[nIndex].GetLength() != 0);        /* 選んだファイルを表示 */ AfxMessageBox((*m_pRecentFileList)[nIndex]); CHogeView *myview = new CHogeView(); ★ myview->GetDocument()->SetFilePath((*m_pRecentFileList)[nIndex]); AfxMessageBox(myview->GetDocument()->GetFilePath()); myview->ReadFile((*m_pRecentFileList)[nIndex]); TRACE2("MRU オリジナル関数内: open file (%d) '%s'.\n", (nIndex) + 1, (LPCTSTR)(*m_pRecentFileList)[nIndex]); if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL){ m_pRecentFileList->Remove(nIndex); } return TRUE; } /****************************************************************** ファイル読み込み ******************************************************************/ void CHogeViewerView::ReadFile(CString filename){ ...(省略) } コンパイルはできるのですが、どうやら★のところがうまく行かず、 Debug Assertion Failed! とエラーがでます。 何が原因なのでしょうか?

  • MFC CSplitter内にコントロールを表示させるには

    Viewクラスを作り中に表示させる方法はわかったのですが、 分割ウィンドウ内にListCtrlなどを表示させるにはどうすればいいのでしょうか? コンパイルはできるのですが、afxcmn.inl Line:266の ASSERT(::IsWindow(m_hWnd));でエラーが出てしまいます。 何がいけないのか教えてください。お願いします。 //.h CSplitterWnd m_wndSplitter; virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext); //.cpp BOOL CWnd::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext) { if(!m_wndSplitter.CreateStatic( this, 1, 2, WS_CHILD | WS_VISIBLE ) ) return FALSE; if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CListCtrlA),CSize(200,300),pContext)) return FALSE; if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListCtrlB) ,CSize( 200,300),pContext)) return FALSE; }

  • MFCを使うための約束事は?

    MFCをつかって、ファイルが存在しているかチェックする プログラムを作ったのですが、上手くいきません。 test.cppは以下のように書いています。 #include "test.h" int _tmain(int argc, _TCHAR* argv[]) { CFile f; CFileException e; if( !f.Open(argv[1], CFile::modeCreate | CFile::modeWrite, &e)) { return 0; } else { f.Close(); return 1; } } test.hは以下のように書いています。 #pragma once #include <afxwin.h> #include <afxext.h> #include <afxole.h> #include <afxdisp.h> どなたかご教授下さい。

  • Debug Assertion Failed

    前回フォルダの中のフォルダの中のファイル検索について質問させていただきましたが再帰を使えというアドバイスをいただきVC++6.0のMFCダイアログベースにて 【InitDialog内】 if(int p=0; p<=argc;p++){ test(__argv[p]); } void ●Dlg::test(CString strFolder) { CFileFind find; CString Newstr=strFolder+_T("\\*.*"); if(find.FindFile(Newstr)) { int i=1; while(i) { if(strFolder==""){ return 0; } i=find.FindNextFile(); if(find.IsDots()){ continue; } if(find.IsDirectory()){ test(find.GetFilePath()); } CString filename=strFolder+"\\"+find.GetFileName(); m_Ary.Add(filename); find.close(); } } } ※m_Aryは●Dlgクラスのメンバ変数 CStringArray m_Ary; これを実行すると Debug Assertion Failedが出てきて デバッグを押すと BOOL CFileFind::FildNextFile() { →ASSERT(m_hContext !=NULL) →の所でひっかかってるようです。 どうすれば直りますか?

  • VC++のプログラミングについて

    VC++(verson2003)でテンプレートはMFCのダイアログベースでアプリケーションを作成しています。以下のプログラムはあるボタンをクリックしたときに呼び出される関数でエディット(コントロール変数m_edit1)に入力されたファイル名の内容(メモ帳に記述したテキスト文)を変数textに格納するものです。このプログラム書き換えてメモ帳に 3 1 4 9 のように記述した数字をint型の一次配列に格納するようにしたいのですがどのようにすればよいでしょうか。 void CprogramDlg::OnBnClickedButton1() { CStdioFile fin; char buf[1001]; CString text,filename; m_edit1.GetWindowText(filename); if (filename == "") return; if(!fin.Open(filename, CFile::modeRead | CFile::typeBinary)) {  AfxMessageBox("読み込みファイルをオープンできません");  return; } text = ""; while (fin.ReadString(buf,1000) != NULL) { text = text + buf; } fin.Close(); }

  • フォルダ内検索

    VC++6.0のMFCで開発しています。 フォルダをどろっぷしてフォルダ内のファイルを取り出すという プログラムです。 メインダイアログのクラス for(int p=0;p<__argc-1;i++) { CFileFind find; CString vv; vv=__argv[p]; CString Newstr=vv+_T("\\*.*"); if(find.FindFile(Newstr)){ int i=1; while(i){ if(__argv[p]==""){ return 0; } i=find.FindNextFile(); if(find.IsDots()){ continue; } if(find.IsDirectory()){ FolderDrop(find.GetFilePath()); } CString filename=vv+"\\"+find.GetFileName(); CString kakucho=GetKaku(filename); while((index3=m_listC.GetNextItem(index3,LVNI_ALL))!=-1){ indexstr=m_listC.GetItemText(index3,0); if(kakucho==indexstr){ kdlg.m_DirectoryFileNameArray.Add(filename); } } m_FilenameArray.Add(filename); m_FolderFileNumber++; } find.Close(); } } void CDragDrop6Dlg::FolderDrop(CString str) { CString kakucho; int i=m_listC.GetItemCount(); CString indexstr; CString filename2; CKakuninDlg kdlg; int p; int index3=-1; for(p=0;p<=c;p++){//ドロップしたファイルがディレクトリの場合 CFileFind find; CString Newstr=str+_T("\\*.*"); if(find.FindFile(Newstr)){ int i=1; while(i){  i=find.FindNextFile(); if(find.IsDots()){ continue; } if(find.IsDirectory()){ FolderDrop(find.GetFilePath()); } filename2=str+"\\"+find.GetFileName(); kakucho=GetKaku(filename2)//ファイルの拡張子を取り出す while((index3=m_listC.GetNextItem(index3,LVNI_ALL))!=-1){ indexstr=m_listC.GetItemText(index3,0); if(kakucho==indexstr){ kdlg.m_DirectoryFileNameArray.Add(filename2); } } m_FilenameArray.Add(filename2); m_FolderFileNumber++; } find.Close(); } } としてフォルダAの中にフォルダBが入っていてその中に入っているファイルCを取り出したいのです。 このプログラムではドロップしたファイルが 一番目のプログラムでフォルダA内の中身がファイルならfilenameに フォルダならBに潜り込む所まではいけました。 しかし実際に別ダイアログに取り出した全てのファイルの一覧を出すと A内のプログラムしか表示されません。どこがいけないのでしょうか?

  • VC++でのメールの添付ファイル受信

    http://www.masukawa.co.jp/sdk/40.html のサイトを参考にしてソースを組んでいます。 ですが BOOL Pop3RecvDataToFile(SOCKET sock, int i, char *filename) { char *get, tmp, buff[BUFF_SIZE]; int size, pos; FILE *fp; if (!SockCmd1(sock, "RETR %d", i, buff, "+OK")) return FALSE; if ((fp = fopen(filename, "wb")) == NULL) return FALSE; tmp = '\0'; pos = 0; for (;;) { size = recv(sock, buff, BUFF_SIZE, 0); for (get=buff; get<(buff+size); get++) { if (*get=='\0' || *get=='\r') continue; if (++pos == 1) { if (*get != '\n') { tmp = *get; continue; } } else if (pos == 2) { if (tmp=='.' && *get=='\n') goto FINISH; if (tmp!='.' || *get!='.') fputc(tmp, fp); } fputc(*get, fp); if (*get == '\n') pos = 0; } } FINISH: fclose(fp); return TRUE; } のfor分で無限ループしています。 その理由がわかりません。どうすればよいでしょうか?

  • テキストファイルの各行の文字列を、コンボBoxに表示させたい

    テキストファイルの各行の文字列を、コンボBoxに表示させたい 現在VC++ MFCの勉強をしております。(MFCに拘ってはおりません) 下のテキストファイル"D:\data.txt" (Shift_JIS)から (内容) 田中さん 斉藤さん 吉田さん CFile の Read で一行ずつ読み込んで、CStringArrayを使って コンボBox に Insert したいと思っています。 下記のコードについてですが。 BOOL CAddDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ここに初期化を追加してください TCHAR* pszFileName = L"d:\\data.txt"; CFileException fileException; CFile cFile; int ret; char buffLine[256] ; CStringArray cStrComboArr ; // リスト ret = cFile.Open( pszFileName , CFile::modeRead | CFile::shareDenyNone , &fileException ); if ( ret == false ) { AfxMessageBox( L"ファイルが読込めません。" ); return 1; } while ( (ret = cFile.Read( &buffLine , 256 )) != 0 ) { cStrComboArr.Add( buffLine ); /* ここでビルドエラー */ } cFile.Close(); // コンボboxに入れる CComboBoxEx* pCombo = (CComboBoxEx*) GetDlgItem( IDC_COMBOBOXEX1 ); COMBOBOXEXITEM cbi ; cbi.mask = CBEIF_TEXT; for ( int i = 0; i < cStrComboArr.GetCount(); i++ ) { cbi.iItem = i; cbi.pszText = (LPTSTR)(LPCTSTR) cStrComboArr.ElementAt(i) ; // 「'CString' から 'LPWSTR' に変換できません」から。 cbi.cchTextMax = 256; pCombo->InsertItem( &cbi ); } return TRUE; // return TRUE unless you set the focus to a control // 例外 : OCX プロパティ ページは必ず FALSE を返します。 } cStrComboArr.Add( buffLine ); の部分でエラー表示は、 「INT_PTR CStringArray::Add(LPCTSTR)' : 1 番目の引数を 'char [256]' から 'LPCTSTR' に変換できません。」です。 根本的にやり方が間違っているのか、もう少しのところなのか、 ズバッとご指摘いただけないでしょうか。 宜しくお願いします。 OS : Vista Home Premium VS 2008 pro

  • アイコンにドラッグアンドドロップ

    VisualStudio 2005 で c++でダイアログベースのアプリケーションを作成しています。 ファイルをアイコンにドラッグアンドドロップして開くということをやりたいのですが、ファイルを開いたときにエラーが発生してしまいうまくいきません。対処方法を教えてください。 ソースファイル ::OnInitDialog(){ : : : : // TODO: 初期化をここに追加します。 DragAcceptFiles(); char *p = AfxGetApp()->m_lpCmdLine; CFile fin; if(p[0]!=NULL){ AfxMessageBox(p); fin.Open(FileName, CFile::typeBinary | CFile::modeRead | CFile::modeNoTruncate); } AfxMessageBox(p)でドロップしたファイルのパスは表示できています。

  • テキストファイルの変換なのですが

    課題でドラックアンドドロップされたファイルの文書の全角カタカナを半角カタカナに変換するというソフトが思うとおりに動きません。 ご協力をお願いします。 ファイルの文字コードはS-jisです。 ドラックアンドドロップをしてテキストファイルを読み込むところまではうまくいきました。 テキストファイルを1バイトずつ読み込んで、全角カタカナの領域である「0x83」の判定を読み込むことはできるのですが、それ以降がうまくいきません。 テキストファイルの文字列に関するアドレスに関する知識不足だとは思うのですが、考えても分かりません。 以下に、コードを載せさせていただきますので解決だけでなく改良もあれば教えてください。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mbstring.h> #define BYTE unsigned char char *getStrTailPoint(char *); char *getDotPoint(char *,char *); char* changeCode(int); void StringCat2(char *, char *); void main(int argc,char** argv ) { //tail…パス+ファイル名のENDポイントアドレス //dot…拡張子のポイントアドレス char *tail ; char *dot; //bfp…BaseFilePointAddress //mfp…MakedFilePointAddress FILE *bfp,*mfp; //makedFileName…作られるファイルの名前 char makedFileName[1000]; static int i; //ファイルからの文字を格納する一時格納する変数 char *r,tmp[3]; int p; BYTE q; if(argv[1]!=NULL){ // argv[1]…ドラックアンドドロップされたファイルとパスが格納 //ファイルを開く if(NULL ==(bfp=fopen(argv[1],"r"))) { printf("指定されたファイルを開けません"); getchar(); exit(1); } tail = getStrTailPoint(argv[1]); dot = getDotPoint(argv[1],tail); //makeFileNameに"."までの元の名前を格納 for(i = 0;&argv[1][i]<=dot;i++){ if(&argv[1][i]<dot){ makedFileName[i]=argv[1][i]; }else{ makedFileName[i]='\0'; } } //makeFileNameに"__"と拡張子を挿入 strcat(makedFileName,"__"); strcat(makedFileName,dot); //新規ファイルの作成 if(NULL ==(mfp=fopen(makedFileName,"w"))){ printf("新規ファイルを作れません"); getchar(); exit(1); } //既存ファイルから新規ファイルにテキストをコピー //新規ファイルの全角文字を半角文字へ while((p = fgetc(bfp)) != EOF) { q=(BYTE)p; if(0x83==q){ /*r=changeCode(p); fputs(r,mfp); break;*/ fputc('2',mfp); continue; } fputc(p,mfp); } //ファイルを閉じる fclose(bfp); fclose(mfp); } return ; } /* *getStrTailPoint   *文字列のENDポイントアドレスを調べる関数 */ char *getStrTailPoint(char *string){ char *p; int i ; int len = strlen(string); for(i=0;i<=len+1;i++){ if(*string=='\0'){ p=string; return p; } string++; } return string; } /* *getDotPoint *ファイルの拡張子の名前が始まるポイントアドレスを検出する関数 */ char *getDotPoint(char *string,char *tail){ char *p; int i; int len = strlen(string); for(i=0;i<len;i++){ if(*tail=='.'){ p=tail; return p; } tail--; } return tail; } char* changeCode(int ch){ char p[3]; char *zenkaku ={"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ\0"}; char *hankaku ={"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ\0"}; char *hankaku2 ={"カキクケコサシスセソタチツテト"}; char *hankaku3 ={"ハヒフヘホ"}; char *dakutenn ={"゛゜"}; do{ if(*zenkaku<='ョ'||ch==*zenkaku){ p[0]=*hankaku; p[1]='\0'; return p; break; }else if(ch==*zenkaku){ if(*zenkaku<='ド'){