2010-03-03 6 views
0

J'essaie de lire le contenu d'un petit fichier texte en utilisant la boîte de dialogue commune, de passer le texte du fichier dans un tampon et de le dessiner sur le formulaire en invalidant le fenêtre et forçant la repeindre.Ecriture du contenu d'un fichier en utilisant Create/ReadFile - C

Tout fonctionne à l'exception de l'affichage du texte à l'écran, lorsque je clique sur le bouton OK dans la boîte de dialogue, aucun texte n'apparaît. Je suis nouveau en C, donc j'ai peut-être manqué un mot-clé ou utilisé un pointeur incorrect.

Voici un extrait de mon code à ce jour:

LRESULT CALLBACK WindowFunc(HWND hMainWindow, UINT message, 
          WPARAM wParam, LPARAM lParam) 
{ 
    CHAR fileText[1024]; 
    HDC hdc; 
    OPENFILENAME ofn; 
    TCHAR szFile[MAX_PATH]; 
    HANDLE fileHandle; 
    RECT clientArea; 
    PAINTSTRUCT pStruct; 

    // Act on current message 
    switch(message)  
    { 
    case WM_CREATE: 
     AddMenus(hMainWindow); 
     break; 

    case WM_COMMAND: 


     switch(LOWORD(wParam)) 
     { 
     case IDM_FILE_OPEN: 

      ZeroMemory(&ofn, sizeof(ofn)); 
      ofn.lStructSize = sizeof(ofn); 
      ofn.lpstrFile = szFile; 
      ofn.lpstrFile[0] = '\0'; 
      ofn.hwndOwner = hMainWindow; 
      ofn.nMaxFile = sizeof(szFile); 
      ofn.lpstrFilter = TEXT("All files(*.*)\0*.*\0"); 
      ofn.nFilterIndex = 1; 
      ofn.lpstrInitialDir = NULL; 
      ofn.lpstrFileTitle = NULL; 
      ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 

      if(GetOpenFileName(&ofn)) 
      { 
       fileHandle = CreateFile(&ofn.lpstrFile,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); 
       ReadFile(fileHandle,fileText,1023,0,0); 
       CloseHandle(fileHandle); 
      } 

      GetClientRect(hMainWindow, &clientArea); 
      InvalidateRect(hMainWindow, 
          &clientArea, 
          TRUE 
          );   

      break; 
     case IDM_FILE_QUIT: 
      SendMessage(hMainWindow, WM_CLOSE, 0, 0); 
      break; 

     } 
     break; 

    case WM_PAINT: 

     hdc = BeginPaint(hMainWindow, &pStruct); 

     DrawTextA(hdc, 
       fileText, 
       -1, 
       &clientArea, 
       DT_WORDBREAK); 

     EndPaint(hMainWindow, &pStruct); 

     break; 

    case WM_DESTROY: 

     PostQuitMessage(0); 
     break; 

    default: 
     return DefWindowProc(hMainWindow, message, wParam, lParam); 
    } 
    return 0; 
} 

Où vais-je mal exactement? Je sais aussi que ce n'est pas parfait dans sa conception car mon but est simplement de le faire fonctionner et de le factoriser ensuite.

Nous vous remercions de votre temps.

+0

Que retourne votre fonction ReadFile? –

Répondre

1

CreateFile (W) Le premier type de paramètre est LPCWSTR (Constante WString).

ofn.lpstrFile est un LPWSTR (wstring)

Alors &ofn.lpstrFile est faux dans votre code (être un LPWSTR*).

+0

Quelle serait la bonne version? –

+0

Vous voulez un 'LPCWSTR' (' const wchar_t * '). Le type '& ofn.lpstrFile' est' LPWSTR * '(' wchar_t ** '). La version correcte serait 'fileHandle = CreateFile (ofn.lpstrFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);' –

0

Ce: ReadFile(fileHandle,fileText,1023,0,0);

devrait être: ReadFile(fileHandle, &fileText,1023,0,0);

une utilisation char* au lieu d'un tableau. Un pointeur char pointe vers le premier élément du tableau.

+0

Hmm? int main (void) {tableau de caractères [15] = {0}; if ((void *) array! = (void *) & array) printf ("je me trompe. \ n"); } –

Questions connexes