2014-06-07 12 views
0

VMWare 이미지에 Windows XP Professional SP3을 설치하고 Visual Studio 2005를 설치했습니다. 나는/clr을 지원하는 새로운 대화 상자 기반 C++ MFC 프로젝트를 만들었습니다. RichEdit 2.0 컨트롤을 자동 생성 대화 상자에 넣었습니다. 텍스트 파일을 읽고 서식을 지정하지 않고 단추 클릭으로이 RichEdit 2.0 컨트롤에 내용을 넣으려고합니다. RichEdit 2.0에 pCRichEditCtrl이라는 변수를 추가했는데 작동하지 않는 코드입니다.VS 2005 CRichEditCtrl 인스턴스의 C++ 편집 내용

를 CWinApp 상속 :

BOOL CTextFormatterApp::InitInstance() 
{ 
    ... 
    AfxInitRichEdit2(); 
    CWinApp::InitInstance(); 
    ... 
} 

를 CDialog 상속 :

void CTextFormatterDlg::OnBnClickedButton1() 
{ 
    StreamReader^ objReader = gcnew StreamReader("c:\\text.txt"); 
    String ^sLine = ""; 
    sLine = objReader->ReadLine(); 
    while (sLine != nullptr) 
    { 
      pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1); 
      pCRichEditCtrl.ReplaceSel(CString(sLine)); 
      sLine = objReader->ReadLine(); 
    } 

    objReader->Close(); 
} 

나는 그것이 계산 여부를 알 수없는하지만 연결에 다음과 같은 경고를 얻을 :

TextFormatterDlg.obj을 : 경고 LNK4248 : 'AFX_CMDHANDLERINFO'에 대한 미해결 typeref 토큰 (01000016); 이미지가 실행되지 않을 수 있습니다.

TextFormatter.obj : 경고 LNK4248 : 'AFX_CMDHANDLERINFO'에 대한 확인되지 않은 typeref 토큰 (01000012); 이미지가 실행되지 않을 수 있습니다.

TextFormatterDlg.obj : 경고 LNK4248 : 'IAccessibleProxy'에 대한 확인되지 않은 typeref 토큰 (01000015); 이미지가 실행되지 않을 수도 있습니다.

저는 최신 프레임 워크에만 익숙하고 어느 쪽도 Windows를 모르기 때문에 내가 무엇을하고 있는지 잘 모르겠습니다.

입력 파일이 있는데 응용 프로그램을 디버깅해도 읽을 수 있지만 편집 상자에 변경 사항이 표시되지 않습니다. 전화하려고 시도했습니다 pCRichEditCtrl.UpdateData (true);하지만 아무 것도 변경되지 않았습니다.

상자 컨트롤러 (pCRichEditCtrl)를 가져 오기위한 변수를 추가하는 것으로 충분합니까? 포인터가 적절한 제어 항목을 가리 키지 않는 것 같습니다.

무엇이 누락 되었습니까?

+0

스트레이트 MFC를 사용하여 컨트롤을로드하는 방법을 알려 주셨습니다. 어떻게/pCRichEditCtrl을 선언합니까? 어떻게 컨트롤에 연결합니까? –

+0

GUI를 통해 추가 : RichEdit 컨트롤에서 오른쪽 클릭 -> 변수 추가 ... 추가 정보 : 다음 줄을 추가하면 RichEdit이 텍스트를 표시하지만 두 번째 줄부터 만 표시됩니다. ** UpdateData (TRUE) ** 이상하게 보입니다. – bdevay

+0

'UpdateData()'가 없으면 아래의 간단한 테스트 프로젝트 인'pCRichEditCtrl'에 대한 나의 대답을 편집했습니다. 이것은 "value"타입의 변수를 가지고있을 때만 필요합니다. –

답변

0

추가 같은 문제에 직면 한 사람들에게 커뮤니티를 제공 할 수 있습니다. 나는 왜 CWinApp 상속에서 두번 Update(FALSE);을 사용해야 만하는지 모르지만 모든 것을 해결합니다.누군가가 아이디어를 가지고 있거나 더 나은 (더 좋은) 솔루션을 가지고 있다면 그것을 주저하지 말고 허용 된 플래그를 그 버전으로 옮깁니다 (가능한 경우 이전에 시도하지 않았습니다).

void CTextFormatterDlg::OnBnClickedButton1() 
{ 
    StreamReader^ objReader = gcnew StreamReader("c:\\text.txt"); 
    String ^sLine = objReader->ReadLine(); 
    UpdateData(FALSE); //this is the first unexpected first aid 
    while (sLine != nullptr) 
    { 
     pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1); 
     pCRichEditCtrl.ReplaceSel(CString(sLine + "\r\n")); 
     UpdateData(FALSE); //this is the second unexpected first aid 
     sLine = objReader->ReadLine(); 
    } 

    objReader->Close(); 
} 
1

그냥 텍스트 파일을 읽을 같은 시도 CLI를 사용할 필요가 없습니다 :

void CTextFormatterDlg::OnBnClickedButton1() 
{ CStdioFile f1; 
    CString sLine; 
    if (!f1.Open(_T("c:\\text.txt"), CFile::modeRead | CFile::typeText)) 
     return; 
    while (f1.ReadString(sLine)) 
    { pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1); 
     pCRichEditCtrl.ReplaceSel(sLine); 
    } 

    f1.Close(); 
} 



편집은 : 제어 변수 pCRichEditCtrl

가) 대화 상자 클래스에 선언해야한다 CRichEditCtrl pCRichEditCtrl;

b)는 ID 번호 (예 :)에 연결해야합니다. 나는 다음과 같은 코드를 테스트하고 나를 위해 작동)

void CTextFormatterDlg::DoDataExchange(CDataExchange* pDX) 
{ CDialogEx::DoDataExchange(pDX); 
    DDX_Control(pDX, IDC_RICHEDIT21, pCRichEditCtrl); 
} 

C와 같은), (나는 최종 솔루션을 공유하고 각 버튼 클릭의 컨트롤 창에 "AA")

pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1); 
pCRichEditCtrl.ReplaceSel(TEXT("aa")); 
+0

힌트를 가져 주셔서 감사합니다. 그러나 그렇지 않습니다. 내 주요 문제를 해결. 파일 읽기가 나를 위해 작동합니다. – bdevay

+0

내 문제에 대한 추가 작업을 해주셔서 감사합니다. a) 자동으로 GUI 액션 (변수 추가 ...)을 추가했습니다. b) a)와 같습니다. c) 나를 위해 작동하지 않습니다 'while'주기 전에 'UpdateData (FALSE);'를 사용해야합니다. 또한주기에. 나는 이유를 모르지만 이것이 이것이 효과를 발휘할 수있는 유일한 방법입니다. 아마도이 버전의 Visual Studio 프레임 워크의 워크 플로에 대해 아무 것도 모른다는 것이 문제입니다. 이 특정 버전의 기본, 특히 제어 및 이벤트 처리에 대한 좋은 온라인 가이드를 제공 할 수 있습니까?) 당신에게 요점을 알려주는 것만으로도 충분할 것입니다.) – bdevay

+1

제어 및 이벤트 처리가 VS 버전보다 많이 변경되지는 않았지만, 이것은 내가 발견 한 가장 명확한 문서입니다 : http://www.functionx.com/visualc/controls/ managing.htm (대부분의 다른 기사에서는 "value"유형의 변수를 관리하는 방법을 설명합니다.이 경우 "control"유형의 변수입니다) –