Я пытаюсь прочитать содержимое небольшого текстового файла с помощью обычного диалогового окна, передать текст в файле в буфер и нарисовать его в форме, сделав окно недействительным и заставив перерисовать.
Все работает за исключением отображения текста на экране, когда я нажимаю кнопку ОК в диалоговом окне, текст не отображается.
Я новичок в C, поэтому мог пропустить ключевое слово или использовать неверный указатель.
Вот фрагмент моего кода:
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;
}
Где я точно ошибаюсь? Кроме того, я знаю, что он не идеален в своей концепции, поскольку моя цель - просто заставить его работать, а затем пересмотреть его.
Спасибо, что уделили время.