Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Проблемы с CreateWindow


Рекомендуемые сообщения

Здравствуйте!

У меня возникла небольшая проблема. Не поможете ли?

Дело вот в чём... Элементарнейшая операция - создание окна

функцией 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

Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

Используй 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.
Ссылка на комментарий
Поделиться на другие сайты

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.... его можно сохранить, а потом использовать... Можно, конечно, и "кривым" путем идти...

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...