teapot Опубликовано 31 июля, 2005 Жалоба Поделиться Опубликовано 31 июля, 2005 Здравствуйте! У меня возникла небольшая проблема. Не поможете ли? Дело вот в чём... Элементарнейшая операция - создание окна функцией CreateWindow (C++). И во всей моей огромной проге компилер находит только 1 (!) ошибку - в параметрах этой функции. Итак, что у меня: hWnd = CreateWindow(szProgName, "smth", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL,(HMENU)NULL, (HANDLE)hInstance,(LPVOID)NULL); Что "должно быть" (всплывающая подсказка) : HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID lpParam) Как видим, "должно" быть 10 параметров, но у меня их 11, и это правильно, потому что при попытке убрать любой из параметров выдаётся ошибка о недостаточном их числе. Что говорит компилер по моему варианту: error C2664: 'CreateWindowExA' : cannot convert parameter 11 from 'void *' to 'struct HINSTANCE__ *' Conversion from 'void*' to pointer to non-'void' requires an explicit cast Очевидно, что находя после 6 "правильных" параметров "неправильный, лишний", компилер сбивается со счета и несёт ерунду. Убираем 7-ой параметр и пишем NULL в конце списка параметров: error C2664: 'CreateWindowExA' : cannot convert parameter 8 from 'struct HWND__ *' to 'int' This conversion requires a reinterpret_cast, a C-style cast or function-style cast Вот такая ерунда. Помогите! В лучшем случае - зашлите рабочий вариант, пожалуйста. ir042kav@study.tcde.ru Спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 31 июля, 2005 Жалоба Поделиться Опубликовано 31 июля, 2005 Используй MSDN: HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); Правильно будет: hWnd = CreateWindow(szProgName, "smth",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); И вообще не надо бездумно "подгонять" переменные к тому типу, что нужны функции... И следует ЧИТАТЬ сообщения о ошибках: Компилятор ругается на то, что HINSTANCE это не void* (чем HANDLE по сути и является...) Если у тебя переменная hInstance имеет правильный тип, то её НАДО передавать без преобразования. А NULL вообще почти никогда принудительно ни к чему не преобразовывают... P.S.: [b]hInstance[/b][in] Windows 95/98/Me: Handle to the instance of the module to be associated with the window. Windows NT/2000/XP: This value is ignored. Ссылка на комментарий Поделиться на другие сайты Поделиться
Andrew.Egorovsky Опубликовано 1 августа, 2005 Жалоба Поделиться Опубликовано 1 августа, 2005 teapot: 1. Есть CreateWindow, а есть CreateWindowEx - разные ф-ции, делающее одно и то же, у CreateWindowEx больше параметров. Иатк: HWND CreateWindow( LPCTSTR lpClassName, // registered class name LPCTSTR lpWindowName, // window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // menu handle or child identifier HINSTANCE hInstance, // handle to application instance LPVOID lpParam // window-creation data ); ClassName - никакого отношения к имени программы изначально не имеет. Это то же самое имя, которое задаешь при вызове RegsiterClass - регистрации класса окон. Можно использовать и "стандарнтые", например BUTTON, EDIT и т.п. WindowName - понятно что ;) dwStyle - битовая маска стилей окна (констант WS_*)- как оно будет выглядеть, будет ли иметь заголовок, сис. меню и т.д. Это смотри в MSDN. x,y,*Width - координаты верхнего левого угла и размеры окна. hWndparent - "родительское" окно hMenu- понятно. HINSTANCE - да, инстанс твоей проги. Вот только зачем приводить его к HANDLE??? Как правило, в WinMain/DllMain первый параметр и так имеет тип HINSTANCE.... его можно сохранить, а потом использовать... Можно, конечно, и "кривым" путем идти... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти