![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
geek2600 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: 1 Всего: 1 |
Здравствуйте уважаемые знатоки WinAPI.
Вот сейчас столкнулся с проблемой. Написал программу которая просто при нажатии кнопки создает новый файл и открывает стандартный диалог выбора файла. Компилятор MSVC++ dot.net Операционная система:Windows XP 32-bit. Приведу пример кода: //str 249 #define STRICT #include <windows.h> #include <windowsx.h> #include <stdio.h> #include "w.h" HINSTANCE hI; void OnPaint(HWND); HWND hwndResidue; HWND hwnd; HWND hwndEdit; HWND hwndEdit2; HWND hwndEdit3; int nTime; HFONT hFont; int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int){ char szClassName[]="MainWindow"; srand((unsigned int)GetTickCount()); char szTitle[]="RND"; MSG msg; WNDCLASS wc; hI=hInst; memset(&wc,0,sizeof(wc)); wc.lpszClassName=szClassName; wc.hInstance=hInst; wc.lpfnWndProc=WndProc; wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground=GetStockBrush(LTGRAY_BRUSH); RegisterClass(&wc); HWND hwnd=CreateWindow(szClassName,szTitle,WS_OVERLAPPEDWINDOW,10,10,400,150,HWND_DESKTOP,NULL,hInst,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){ switch(msg){ HANDLE_MSG(hwnd,WM_CREATE,OnCreate); HANDLE_MSG(hwnd,WM_COMMAND,OnCommand); HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy); HANDLE_MSG(hwnd,WM_PAINT,OnPaint); } return(DefWindowProc(hwnd,msg,wParam,lParam)); } BOOL OnCreate(HWND hwnd,LPCREATESTRUCT){ CreateWindow("BUTTON","Дробные",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 260,70,80,20,hwnd,(HMENU)ID_GO3,hI,NULL); char szFace[]="Times New Roman Cyr"; LOGFONT lf; ZeroMemory(&lf,sizeof(lf)); strcpy(lf.lfFaceName,szFace); lf.lfHeight=8; hFont=CreateFontIndirect(&lf); return TRUE; } void OnCommand(HWND,int id,HWND,UINT)//А вот функция срабатывающая при нажатии кнопки { if(id==ID_GO3){ OPENFILENAME ofn9; char HTMFilePUT1[1000]; ZeroMemory(&ofn9, sizeof(ofn9)); ofn9.lStructSize = sizeof(OPENFILENAME); ofn9.hwndOwner =hwnd; ofn9.lpstrFile = HTMFilePUT1; ofn9.nMaxFile = sizeof(HTMFilePUT1); ofn9.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; ofn9.nFilterIndex = 1; ofn9.lpstrFileTitle = NULL; ofn9.nMaxFileTitle = 0; ofn9.lpstrInitialDir = NULL; if(GetOpenFileName(&ofn9)){ HANDLE hWipedFile4300; hWipedFile4300 = CreateFile("ne.html", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, 0,NULL); if(hWipedFile4300==INVALID_HANDLE_VALUE){MessageBox(0,"NOTWORK",0,0);} } } } void OnPaint(HWND hwnd) { PAINTSTRUCT ps; HDC hdc=BeginPaint(hwnd,&ps); SetBkColor(hdc,RGB(198,195,198)); } void OnDestroy(HWND){ DeleteFont(hFont); PostQuitMessage(0); } После нажатия на кнопку и выбора любого файла я получаю сообщение NOTWORK и файл естественно тоже не создается Пожалуйста подскажите.В чем может быть проблема и как ее можно обойти. Заранее благодарен. |
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
навскидку - у тебя предпоследний параметр у функции CreateFile задан неверно (вместо 0 попробуй FILE_ATTRIBUTE_NORMAL), но проверять лень да и не на чем сейчас. Почитай тут и посмотри этот пример
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
geek2600 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: 1 Всего: 1 |
Спосибо.
Но к сожалению FILE_ATTRIBUTE_NORMAL никак не повлиял.Если убрать функцию GetOpenFileName то фаил создается без проблем.Тут наверное какойто нюанс с GetOpenFileName есть. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
geek2600 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: 1 Всего: 1 |
А кроме GetLastError() варианты есть?
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
объясняю еще раз: когда возникают какие-либо ошибки при вызовах api-функций, нужно вызвать GetLastError и посмотреть какой код она возвращает - как правило этого бывает достаточно, чтобы понять, в чем ошибка. если сам не догоняешь, то пишешь этот код ошибки сюда. "еще варианты"...
![]() а ошибку он тебе выдает потому, что такой файл(ne.html) уже существует. если нужно в любом случае создавать новый файл, то и использовать надо флаг CREATE_ALWAYS. |
|||
|
||||
geek2600 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: 1 Всего: 1 |
if(hWipedFile4300==INVALID_HANDLE_VALUE){
char szLineu[90]; DWORD LK=GetLastError(); sprintf(szLineu,"%d",LK); MessageBox(0,szLineu,0,0); } В моем случае LK=80; немного не понял на сает CREATE_ALWAYS.Это изменение не на что не повлияло. Подскажите , о чем говорит результат GetLastError? Это сообщение отредактировал(а) geek2600 - 7.9.2008, 16:10 |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Не хватало строки 98 - не вызывался GetOpenFileName. |
|||
|
||||
geek2600 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: 1 Всего: 1 |
вставил ваш код.появляется сообщение Success.но файл не создается.непойму
![]() Добавлено через 6 минут и 2 секунды проблема еще заключалась в том что было необходимо указать полный путь-т.е.C:\ne.html. Всем огромное спосибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |