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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
dmka
А если я его удалить потом не смогу? Существует же отдельное право на удаление.
Хотелось бы по уму сделать.
В принципе вот тут пример есть - http://msdn.microsoft.com/en-us/library/aa379283(VS.85).aspx
Осталось понять принцип, вытащить необходимое и умудриться засунуть в код инсталлятора на inno setup.

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 12:46 21-08-2009
koderr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Grey2009
glGetString( GL_EXTENSIONS )
алсо линк.

----------
The truth is out there...

Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 15:34 21-08-2009
dmka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt
Я тоже когда-то над этим вопросом думал Файл может не писаться по сотне разных причин, лишь одна из которых ACL. Причем даже если ты проверишь сейчас, не факт что через секунду ничего не поменяется (race condition). Ну диск например заполнился...
 
Потому нужно просто писать то, что ты там инсталлируешь, и внятно сообшить об ошибке, если она произойдет. Код ошибки и текстовое сообщение от WinAPI всегда можно получить.
 

Цитата:
Существует же отдельное право на удаление.  

пусть тот, кто его установил, сам и удаляет

Всего записей: 947 | Зарегистр. 23-04-2003 | Отправлено: 15:45 21-08-2009
Al_Lie

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех!
Не так давно занимаюсь программирование VS C++, очень заинтересовал подход чистого WinAPI. Хочется разобраться в тонкостях сего.  WinAPI - это набор функций, типов данных, сообщений ОС Windows. Работать с ними достаточно удобно.  
Стандартная функция типа: int MessageBox ( HWND hWnd,  LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) понятна, в MSDN все доступно описано как с ней работать. И вот вопрос: а исходный код функций WinAPI, стандартных контролов таких как Button, ComboBox, сообщений и др. доступен ?

Всего записей: 7 | Зарегистр. 19-07-2009 | Отправлено: 12:56 16-09-2009
Hiken



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Al_Lie
Нет конечно, ну вы можете попробовать глянуть утекшие сорцы Win2k и NT4, но не более того

Всего записей: 1343 | Зарегистр. 14-01-2006 | Отправлено: 13:23 16-09-2009
Lyrik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Al_Lie
официально - нет, но можно воспользоваться одним из следующих способов:
1. дизассемблированием интересующей тебя функции
2. исходники wine
3. исходники reactos
4. часть исходников win2k, которые гуляют по сети

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 13:24 16-09-2009
Al_Lie

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Исходники видимо лежат у Билла Гейтса дома.))) Спасибо за коменты.

Всего записей: 7 | Зарегистр. 19-07-2009 | Отправлено: 19:59 16-09-2009
Andrey32

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста новичку.
Первая программа, естественно Hello world!
Код из книги Щупака "Win32 API. Эффективная разработка приложений" .

Код:
#include <windows.h>
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
                    int nShowCmd)
{
    MessageBox (NULL, "Hello, WinWorld32!", "Hello from messagebox", MB_OK);
    return 0;
}
 

При компиляции выдает ошибку, что:

Цитата:
'MessageBoxW' : cannot convert parameter 2 from 'const char [19]' to 'LPCWSTR'

Писал в VS2008, Win32 project, Empty project. Подом добавил cpp.
Меня смущает, что F1 на MessageBox выдает справку

Цитата:
The IConsole2::MessageBox method displays a message box.
 
HRESULT MessageBox(
  [in]                 LPCWSTR lpszText,
  [in]                 LPCWSTR lpszTitle,
  [in]                 UINT fuStyle,
  [out]                int* piRetval
);
 
 

 
Хотя  прототип должен быть таким:
 

Код:
(
    HWND hWnd,        // дескриптор окна владельца
    LPCTSTR lpText,    // адрес текста в окне сообщений
    LPCTSTR lpCaption,    // адрес заголовка в окне сообщений
    UINT uType         // стиль окна сообщений
);


Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 23:16 04-10-2009
Abs62



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

Цитата:
При компиляции выдает ошибку, что:

Угу. Компилируется юникодная версия программы, а параметры задаются CHAR вместо WCHAR.

Код:
MessageBox (NULL, L"Hello, WinWorld32!", L"Hello from messagebox", MB_OK);


Цитата:
Меня смущает, что F1 на MessageBox выдает справку

Это не тот MessageBox, это метод интерфейса IConsole2.


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:42 04-10-2009
Andrey32

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

Цитата:
Это не тот MessageBox, это метод интерфейса IConsole2

Да я понял, что это какой то метод, только почему то это та инфа , которая вывалилась по F1 c курсором на MessageBox.
 

Цитата:
Угу. Компилируется юникодная версия программы, а параметры задаются CHAR вместо WCHAR.  

О! Спасибо. Просто я до этого писал только для консоли, с ASC.
Включил в свойствах проекта Character Set -> Not set.  Теперь можно писать без L.

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 00:16 05-10-2009
karakurt2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrey32, используйте макроподстановку TEXT("строковый литерал"). Тогда в Вашей программе автоматически будет подставляться правильное представление символьных строк в функции API.

Всего записей: 733 | Зарегистр. 06-12-2003 | Отправлено: 20:36 05-10-2009
Andrey32

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

Цитата:
Andrey32, используйте макроподстановку TEXT("строковый литерал"). Тогда в Вашей программе автоматически будет подставляться правильное представление символьных строк в функции API.

 
Не очень понял с макроподстановкой. Можно пример кода?

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 00:29 08-10-2009
Abs62



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

Код:
MessageBox (NULL, _TEXT("Hello, WinWorld32!"), _TEXT("Hello from messagebox"), MB_OK);

Такой код правильно откомпилируется независимо от того, включён юникод или нет.
 
PS. Вместо _TEXT можно использовать _T, эффект тот же.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:46 08-10-2009
peacedeth

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с проблемой...
 
Не могу разобраться с кнопкой. Надо отловить от нее сообщение о нажатии и отжатии. Пробывал ставить кнопке стиль BS_NOTIFY и отлавливать в WM_COMMAND сообщения HIWORD(wParam) == BN_PUSHED или BN_UNPUSHED, но ни какого эффекта, не приходят эти сообщения
Объясните почему и как решить мою задачу.
 
Заранее благодарен за ответы!!!

Всего записей: 12 | Зарегистр. 28-02-2007 | Отправлено: 16:24 11-10-2009
Abs62



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

Цитата:
Объясните почему

Потому, что:

Цитата:
Note:  This notification message is provided only for compatibility with 16-bit versions of Microsoft Windows earlier than version 3.0. Applications should use the BS_OWNERDRAW button style and the DRAWITEMSTRUCT structure for this task.
 

Цитата:
и как решить мою задачу.

Зависит от задачи. Можно через BS_OWNERDRAW, но тогда кнопку придётся рисовать самому. Или можно написать свой обработчик событий для кнопки и ловить в нём WM_LBUTTONDOWN, WM_LBUTTONUP.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 18:25 11-10-2009
peacedeth

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я и BS_OWNERDRAW кнопку создавал, нотификационные сообщения все равно не приходят. Можно конечно по событиям в WM_DRAWITEM отследить что произошло, но мне кажется это как то криво, хотелось бы именно получать BN_PUSHED/UNPUSHED.
 
А как написать свой обработчик? Киньте примерчик или описание, или ссылку в МСДН.

Всего записей: 12 | Зарегистр. 28-02-2007 | Отправлено: 20:15 11-10-2009
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
peacedeth
Обработчик - это по сути та же самая оконная функция. Почитать, как она подключается к уже существующему окну (а кнопка - это тоже окно) можно здесь, например, раздел "Instance Subclassing". Там показано на примере Edit control, но для Button принцип тот же.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 20:39 11-10-2009
peacedeth

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Abs62!
Буду учиться.

Всего записей: 12 | Зарегистр. 28-02-2007 | Отправлено: 00:16 12-10-2009
ShIvADeSt



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

Цитата:
Не могу разобраться с кнопкой. Надо отловить от нее сообщение о нажатии и отжатии. Пробывал ставить кнопке стиль BS_NOTIFY

Через SetWindowLong ставить собственную оконную функцию на кнопку и мониторить WM_LBUTTONDOWN WM_LBUTTONUP.
Однако проблема в том, что эти события приходят не зависимо - то есть не факт что каждому дауну будет соотв ап.
Вопрос - в след, нафига ловить событие нажатия и отжатия?

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:38 12-10-2009
peacedeth

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо сделать так что бы при удержании кнопки нажатой непрерывно выполнялось какое то действие до момента отпускания этой кнопки.
 
Я попробовал через SetWindowLong сделать функцию, вроде работает. Ловит WM_LBUTTONDOWN WM_LBUTTONUP именно над кнопкой.
 
А что значит "не факт что каждому дауну будет соотв ап."? Это в каких случая?
 
Еще такой вопрос, у меня много кнопок которые нужно так контролировать. Мне вручную для каждой кнопки указывать свой обработчик сообщений или можно как то это автоматизировать, например создать свой класс или новый контрол?

Всего записей: 12 | Зарегистр. 28-02-2007 | Отправлено: 04:45 12-10-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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