Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Thritt



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert

Цитата:
но в коды посмотри, которые идут с книгой Петзолда

я как раз оттуда и смотрел код. Но только там кроме #include <windows.h> ничего не включено.

Всего записей: 79 | Зарегистр. 10-07-2006 | Отправлено: 22:44 18-11-2006
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Thritt
Он там ещё приводит команды для компиляции и сборки.
 
Но самый простой способ -- воспользоваться прагмой линкера
#pragma comment(lib, "winmm")
Эту строчку вставь прямо в код где-то вначале файла.


----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 22:55 18-11-2006 | Исправлено: TeXpert, 23:01 18-11-2006
Thritt



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
спасибо за помощь!

Всего записей: 79 | Зарегистр. 10-07-2006 | Отправлено: 12:35 19-11-2006
Thritt



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня вопрос: создаю кнопку стиля BS_OWNERDRAW
 
case WM_CREATE:
    Btn1 = CreateWindowW(TEXT("BUTTON"), NULL, WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,
    100, 130, 130, 35,hWnd, (HMENU)ID_BTN1, hInst, NULL);
    break;
 
затем рисую на кнопке битмап и хочу сделать так, что если щелкнуть по кнопке то во время щелчка на кнопке должна отображаться другая картинка:
 
case WM_DRAWITEM:
    pdis = LPDRAWITEMSTRUCT(lParam);
    cbtndc = CreateCompatibleDC(pdis->hDC);  
    SelectObject(cbtndc, bm1);    
    BitBlt(pdis->hDC, 0, 0, 130, 35, cbtndc, 0, 0, SRCCOPY);  
    if (pdis->itemState & ODS_SELECTED)
    {
    SelectObject(cbtndc, bm2);
    BitBlt(pdis->hDC, 0, 0, 130, 35, cbtndc, 0, 0, SRCCOPY);
    }
    ReleaseDC(Btn1, cbtndc);
    break;
 
И вот вопрос: почему когда я щелкаю по кнопке то вторая картинка остается, хотя она должна отображаться только во время нажатия на кнопку? кнопка остается как бы нажатой и "отжать" обратно ее нельзя.
 
HWND Btn1;
HBITMAP bm1 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
HBITMAP bm2 = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2));
HDC cbtndc;
LPDRAWITEMSTRUCT pdis;

Всего записей: 79 | Зарегистр. 10-07-2006 | Отправлено: 22:02 20-11-2006
Collapse_Troll

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте! Дайте пожалуйста пример получения статуса CD-привода (то есть лоток открыт либо закрыт). А то у самого не получается.
 
Программа из FAQ по С++ Builder. Получаю статус CD-ROM-а, постоянно возвращается "  Current mode is 'open'  ", незаваисимо от того, открыт сидюк или нет. Как правильно? Вот код:
Подробнее...
В папке с программой лежит либа winmm.lib

Всего записей: 792 | Зарегистр. 05-08-2006 | Отправлено: 22:54 20-11-2006 | Исправлено: ShIvADeSt, 01:50 21-11-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Thritt

Цитата:
У меня вопрос: создаю кнопку стиля BS_OWNERDRAW

в свое время переводил его на дельфи и все работало как надо
Подробнее...
тебе ничего переводить не надо, просто разберись.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:53 21-11-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Collapse_Troll  
здесь все гораздо проще
зы - иногда полезно юзать Версия для печати

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 10:23 21-11-2006
Astraalfa

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поскажите ,пожалуйста, как загрузить gif-анимашку на окно средствами WinApi?

Всего записей: 2 | Зарегистр. 20-11-2006 | Отправлено: 12:44 21-11-2006
daMIR



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с API- для меня это новая тема Нужно в общем появление окошка с выбором директории, наподобии команды "открыть" в программах, точнее кнопка "обзор" В программе я буду использовать путь до папки котрую выберу. Какую для этого необходимо использвать функцию, какие параметры казывать и в какой длл-ке она находится? Искал в теме- ответа не нашел. В справочнике нашел:

Цитата:
 
Функция GetSystemDirectory
Описание:
function GetSystemDirectory(Buffer: PChar; Size: Word);
Получает имя маpшpута для подкаталога системы Windows.
Паpаметpы:
Buffer: Пpинимающий буфеp.
Size: Размеp буфеpа (не менее 144 символов).
функция находится в файле kernel32.dll

Непонятно как/какой указать буфер, да и остальные праметры тож.

Всего записей: 1757 | Зарегистр. 14-03-2004 | Отправлено: 23:53 21-11-2006
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
daMIR
Можно SHBrowseForFolder использовать.
Ссылка в MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp
Там же вся информация с примерами.

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 00:45 22-11-2006
butsefal



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите новичку разобраться с копированием данных из другой программы. Имеется программа, которая выводит данные в окно в виде списка, доступа к коду нет, окно не текстовое, видимо. В этом окне строку можно выбрать либо мышкой, либо стрелками вниз-вверх и скопировать через Ctrl-C на Cipboard. Оттуда их потом легко достать.  
Я пытаюсь этот процесс автоматизировать. Написал  программу, которая а). находит хэндл окна, б). посылает ему SetForegroundWindow, в). через PostMessage сдвигает курсор на нужную строку в списке. Далее я пытался ему засылать через PostMessage последовательность:  
VK_CONTROL , WM_KEYDOWN ; VK_C, WM_KEYDOWN; VK_C, WM_KEYUP; VK_CONTROL, WM_KEYUP,
 то есть, эмулировать Ctrl-C. На Clipboard ничего не копируется (я проверяю через Ctrl-V в текстовый редактор). Если же я физически нажимаю на клаве Ctrl-C, то строка копируется.
Я решил проверить через WinSpector сообщения, которые уходят окну при эмуляции Ctrl-C и при физическом нажатии на клаве, они те же самые, что и выше в обоих случаях ... Проверил, что родителям этого окна никакой информации при копировании не передаётся. В чём же дело и почему моя эмуляция не работает ?

Всего записей: 217 | Зарегистр. 03-09-2001 | Отправлено: 06:14 22-11-2006
xdude



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
butsefal
А не легче для хэндла этого списка сделать GetWindowText ? Хотя, не знаю, сработает ли это для списка, но что точно сработает - так это LB_GETTEXT, LB_GETCOUNT и иже с ними. Если не получается сделать это из другого процесса - можно внедрить поток в нужный процесс, используя CreateRemoteThread. В общем, MSDN в помощь

----------
photocraft.com.ua

Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 06:40 22-11-2006
butsefal



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не знаю как организованы  данные в списке в этом окне. Список состоит из строк, которые можно копировать через Ctrl-C. Я запустил Windows Scanner от InqSoft и он не может извлечь из этого окна никаких данных вообще, текста там точно нет через GetWindowText.  
И это не ListBox,  WindowsClass окна:  WindowsForms10.Window.8.app61 Конечно, я предпочёл бы извлечь с помощью каких-то сообщений, посланных окну, но оно не отзывается на никакие ...GETTEXT, может я не знаю как спросить ... Да, и у окна нет childs.

Всего записей: 217 | Зарегистр. 03-09-2001 | Отправлено: 07:55 22-11-2006
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Попробуй вместо нажатий на кнопки послать приложению WM_COPY. Правда, в MSDN написано, что это для эдитов и комбиков, но мало ли, вдруг поможет.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 12:49 22-11-2006
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
butsefal
А Spy++ что говорит?

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 13:30 22-11-2006
butsefal



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я использовал Winspector, который аналог Spy++, он мне больше нравится. Он ничего не говорит, окно вообще выглядит графическим, listbox, editbox, combobox и т.д. не катят.  Вообщем после долгих танцев с бубном мне удалось сэмулировать захват на Clipboard c Ctrl-C через keybd_event сообщения. Пока не до конца понял как там двигаться по списку и делать захват в заданном месте, но удалось вытащить строки из середины списка.  Почему не срабатывает PostMessage окну, я не знаю.

Всего записей: 217 | Зарегистр. 03-09-2001 | Отправлено: 14:19 22-11-2006
daMIR



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
По ссылке на англицком к сожалению- я ни бум-бум . Нашел правда что-то http://cbuilder.ru/faqs/bcbfaq/Allow%20the%20user%20to%20browse%20for%20a%20folder.html
Там написано что будет возвращаться какой-то пидл, и как я понял нужно повозиться чтоб преоброзовать его в путь. Плюс его еще как-то "очищать" надо...

Всего записей: 1757 | Зарегистр. 14-03-2004 | Отправлено: 00:10 23-11-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
butsefal
вот здесь подробно все обсуждалось
http://forum.ru-board.com/topic.cgi?forum=33&topic=4297&start=280
 
Добавлено:
daMIR
Однако учимся юзать фильтр
http://forum.ru-board.com/topic.cgi?forum=33&topic=2042#1

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:06 23-11-2006
Collapse_Troll

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
tomegadeth
прошу прощения что затянул с ответом. Спасибо, но мне нужно знать, открыт сидюк в данный момент или нет:
 
Если сидюк открыт - то закрыть
Если сидюк закрыт - соответственно открыть.
 
Так как узнать его текущее состояние?

Всего записей: 792 | Зарегистр. 05-08-2006 | Отправлено: 16:31 26-11-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Collapse_Troll
Цитата:
Получаю статус CD-ROM-а, постоянно возвращается "  Current mode is 'open'  ", незаваисимо от того, открыт сидюк или нет.
знакомые грабли... так будет всегда, даже если лоток закрыт но в нем нет компакт-диска...
можно попробовать, проверить статус привода. и если он "open", вызвать метод который закрывает привод. Если выход из метода слишком быстрый (придется настроить по времени) значит лоток и так был закрыт и сразу вызываем метод открытия привода. Не самое красивое решение - но самое простое. Сложнее - через ASPI или для ос-ей NT, XP и выше - DeviceIoControl.

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 19:07 26-11-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru