|
работа с API-функциями в MFC-приложении
|
|||
---|---|---|---|
#18+
Добрый день. Вопрос в следующем: известно, что в MFC-приложениях не рекомендуется использовать апишные функции, а использовать заменяющие их специальные, например: MessageBox -> AfxMessageBox, и т.д. Как же их все-таки использовать? Конкретно, мне нужна функция UpdateLayeredWindow. Соответственно, я подключаю Winuser.h. А он требует в свою очередь подключения windows.h - что делать нельзя. Как быть? Надеюсь на помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2002, 13:47 |
|
работа с API-функциями в MFC-приложении
|
|||
---|---|---|---|
#18+
Подключаешь <windows.h> и в вкладке Link соответствующую *.lib ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2002, 15:44 |
|
работа с API-функциями в MFC-приложении
|
|||
---|---|---|---|
#18+
он ругается на подключение Windows.h MFC сам его подключает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2002, 17:08 |
|
работа с API-функциями в MFC-приложении
|
|||
---|---|---|---|
#18+
Вообще говоря, практич. любой проект MFC подрубает неявно практич. все заголовочные файлы win через подключение файла afxwin.h (проекты, имеющие окно), или afx.h (static library) - посмотрите stdafx.h своего проекта. Через afx.h включается windows.h, который включает в свою очередь winuser.h. Так что winuser.h самому подключать не нужно. Однако, если открыть в редакторе winuser.h, то ф-ю UpdateLayeredWindow я там не нашел (VC 6.0, SP5) :), хотя User32.lib ее действительно экспортирует (за разъяснениями обращайтесь в Редмонт или лично к Гейтсу :)). Что делать? Придется ручками описать прототип этой ф-ии в заголовочном файле, в котором нужно вызывать ф-ю или, еще проще, в stdafx.h: myfile.h: #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ BOOL WINAPI UpdateLayeredWindow( HWND hwnd, // handle to layered window HDC hdcDst, // handle to screen DC POINT *pptDst, // new screen position SIZE *psize, // new size of the layered window HDC hdcSrc, // handle to surface DC POINT *pptSrc, // layer position COLORREF crKey, // color key BLENDFUNCTION *pblend, // blend function DWORD dwFlags // options ); #ifdef __cplusplus } #endif /* __cplusplus */ ... myfile.cpp: ... bError = ::UpdateLayeredWindow(::GetActiveWindow(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); if (!bError) dwError = GetLastError(); // для отладки примера // у меня возврат bError == 0 (ошибка, естессно) // dwError == ERROR_INVALID_PARAMETER // что похоже на правду, т.е. // ф-я вроде вызвалась и отработала :) p.s. насчет того что не рекомендуется использовать апишные ф-ии - слышу впервые, кроме случая с AfxBeginThread(..) вместо ::CreateThread(..), но это вроде не отсюда... да, в проекте MFC App User32.lib подрубать не надо также (как и windows.h :), MFC его сам подрубает (однако, ошибки сборки не будет). удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2002, 16:31 |
|
работа с API-функциями в MFC-приложении
|
|||
---|---|---|---|
#18+
ладно, поковыряюсь еще... прототип updateLayeredWindow есть в Winuser.h - только не в стандартной установке, не важно какой SP... Нужно скачать MS SDK поновее... У меня на работе диск валялся, я оттуда поставил. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2002, 17:33 |
|
работа с API-функциями в MFC-приложении
|
|||
---|---|---|---|
#18+
насчет SDK вы правы. тогда проблем не должно возникнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2002, 14:48 |
|
|
start [/forum/topic.php?desktop=1&fid=57&tid=2036478]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 257ms |
total: | 376ms |
0 / 0 |