Jump to content
СофтФорум - всё о компьютерах и не только

Проблемы с CreateWindow


Recommended Posts

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

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

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

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

Спасибо!

Link to comment
Share on other sites

Используй 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.
Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...