我正在尝试使用“公用”对话框读取小文本文件的内容,将文件中的文本传递到缓冲区中,并通过使窗口无效并强制重新绘制来将其绘制到窗体中。
除了在屏幕上显示文本,当我单击对话框上的“确定”按钮时,没有任何文本显示,一切都正常工作。
我是新来的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;
}
我到底错在哪里?我也知道它的概念并不完美,因为我的目标只是让它工作,然后再重新考虑它。
谢谢你抽出时间。