[C++/WinAPI] WriteFile - Obsługa funkcji

0

Mój problem polega na tym, iż nie wiem, jak obsłużyć tą funkcję. Udało mi się to z funkcją CreateFile, jednak przy WriteFile pojawia się masa bug'ów, czemu się nie dziwię, gdyż cały czas robię coś nie tak. Poniżej przedstawiam kod programu:

#include <windows.h>
#include <commctrl.h>

HANDLE hFile,wFile;
CHAR szClassName[]="Nazwa programu";
HWND hWnd,hButton,hWrite;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 
HINSTANCE* hInst;
CHAR buff[100];

INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lStart,INT nShow)
{
hInst=&hInstance;
WNDCLASSEX wc;
wc.hInstance=*hInst;
wc.lpszClassName=szClassName;
wc.lpfnWndProc=WndProc;
wc.style=CS_DBLCLKS;
wc.cbSize=sizeof(WNDCLASSEX);
wc.hIcon=LoadIcon(0,IDI_APPLICATION);
wc.hIconSm=LoadIcon(0,IDI_APPLICATION);
wc.hCursor=LoadCursor(0,IDC_ARROW);
wc.cbWndExtra=0;
wc.cbClsExtra=0;
wc.lpszMenuName=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
if(!RegisterClassEx(&wc)) return 0;
hWnd=CreateWindowEx(0,szClassName,"Nazwa klasy okienka",WS_OVERLAPPEDWINDOW,50,50,500,500,0,0,*hInst,0); 
ShowWindow(hWnd,nShow);
MSG msgs;
while(GetMessage(&msgs,0,0,0))
{
TranslateMessage(&msgs);
DispatchMessage(&msgs);
}
return msgs.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wPar,LPARAM lPar)
{
switch(msg)
{
case WM_CREATE:
hButton=CreateWindowEx(0,WC_BUTTON,"Nacisnij",WS_CHILD|WS_VISIBLE,150,200,200,70,hwnd,(HMENU)1,*hInst,0);
hWrite=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"Wpisz tu wpierw jednak coś.",WS_CHILD|WS_VISIBLE,150,300,200,70,hwnd,(HMENU)1,*hInst,0);
break;
case WM_COMMAND:
if(wPar==1) {
int byte = 1024;
INT lang = GetWindowTextLength(hWrite);
MessageBox(HWND_DESKTOP,"Nacisnąłeś przycisk, czeka Cię za to kara.","OKNO",MB_OK);
hFile=CreateFile("C:\\Users\\RD\\Desktop\\pusty_plik.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
GetWindowText(hWrite,buff,byte);
wFile = WriteFile(hFile,buff,*lang,0);
}
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wPar,lPar);
}
return 0;
}
 

To ten fragment plus ewentualnie bufor, który zadefiniowałem na początku.

case WM_COMMAND:
if(wPar==1) {
int byte = 1024;
INT lang = GetWindowTextLength(hWrite);
MessageBox(HWND_DESKTOP,"Nacisnąłeś przycisk, czeka Cię za to kara.","OKNO",MB_OK);
hFile=CreateFile("C:\\Users\\RD\\Desktop\\pusty_plik.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
GetWindowText(hWrite,buff,byte);
wFile = WriteFile(hFile,buff,*lang,0);
} 
Będę bardzo wdzięczny za pomoc w zrozumieniu budowy tej funkcji i błędów, jakie popełniam. 
Tego typu problemy z buforami miałem w przeszłości i nie udało mi się ich jeszcze rozwiązać.
Informacje znalezione w internecie pomogły mi niestety tylko w funkcji GetWindowText();
Aha - program ma na zadanie po naciśnięciu przycisku zapisać do pliku tekst, który jest podany w polu.
Z góry dziękuję.
0
WriteFile(hFile, string, string.length(), &bytesWritten, NULL)

funkcja przyjmuje 5 parametrów, u Ciebie widzę 4. Ja też się zacząłem bawić tymi funkcjami i moje rozwiązanie jest takie(podam 2 przykłady):

najpierw mam jakiś tekst

const char* text
DWORD bytesWritten = 0;

i funkcja wygląda w ten sposób:

WriteFile(hFile, text, strlen(text), &bytesWritten, NULL);

dla string'ów

string text;
DWORD bytesWritten = 0;

WriteFile(hFile, text, text.length(), &bytesWritten, NULL);

To tylko wskazówka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1