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

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

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

Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksoid1978
Взводить некий флаг в обработчике WM_MOVING и проверять/сбрасывать его в обработчиках WM_NCLBUTTONUP и WM_LBUTTONUP. Пойдёт?

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 09:15 08-04-2011
Aleksoid1978



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
 
Свое окно - надо отловить момент когда перемещение закончилось. Либо другой вариант - каким-то образом при перетаскивании запретить движение по условию.


----------
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /Patriot 32Gb@3200 /Kingston 500Gb M.2 /RTX 4060 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Всего записей: 9226 | Зарегистр. 11-05-2006 | Отправлено: 09:50 08-04-2011
ShIvADeSt



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

Цитата:
Взводить некий флаг в обработчике WM_MOVING и проверять/сбрасывать его в обработчиках WM_NCLBUTTONUP и WM_LBUTTONUP. Пойдёт?

И плюс проверку на потерю фокуса (если во время перетаскивания переключились в другое окно).

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:31 08-04-2011
V0lt



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

Цитата:
Почитай тут, там предлагается класс по твоей проблеме. Посмотри реализацию, может подойдет

спасибо, но через свойство как-то проще
 
 
Есть другая проблема. Нарисовал я дерево с чекбоксами (CTreeCtrl), смотрю, что-то не весело  получается..
1) Если я ставлю галку на родительский узел, то на дочерних узлах галки не появляются. Это надо самому что-ли писать?
2) Не нахожу свойства частично поставленная галка. Оно же существует или как?
3) Кликаю по чекбоксам, на нем ставиться галка, но при этом происходит какой-то бред. Надпись справа выделяется на время клика, а потом выделение исчезает (оно возвращается к последнему выделенному узлу). Это мигание можно как-то отключить?
4) Нужно было некоторые узлы выделить программно, но как оказалось, функция SetCheck вообще не работает
 
Но делают же люди нормальные деревья с чекбоксами, тот же InnoSetup например. Или сами с нуля рисуют?

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 17:29 09-04-2011 | Исправлено: V0lt, 17:30 09-04-2011
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Решения:
1.1) выделяем/снимаем выделение для всех дочерних item

Код:
CPPageFormats.h
...
    afx_msg void OnTVItemChanged(NMHDR *pNMHDR, LRESULT *pResult);
...
 
CPPageFormats.cpp
...
BEGIN_MESSAGE_MAP(CPPageFormats, CPPageBase)
    ON_NOTIFY(TVN_ITEMCHANGED, IDC_TREE1, OnTVItemChanged)
END_MESSAGE_MAP()
...
void CPPageFormats::OnTVItemChanged(NMHDR *pNMHDR, LRESULT *pResult)//TVN_ITEMCHANGED
{
    NMTVITEMCHANGE* p = (NMTVITEMCHANGE*)pNMHDR;
    if ((p->uStateOld & 0x1000) && (p->uStateNew & 0x2000))
    {
        HTREEITEM hChildItem =m_formats.GetChildItem(p->hItem);
        while (hChildItem) {
            m_formats.SetCheck(hChildItem);
            hChildItem = m_formats.GetNextItem(hChildItem, TVGN_NEXT);
        }
    }
    else if ((p->uStateOld & 0x2000) && (p->uStateNew & 0x1000))
    {
        HTREEITEM hChildItem =m_formats.GetChildItem(p->hItem);
        while (hChildItem) {
            m_formats.SetCheck(hChildItem, false);
            hChildItem = m_formats.GetNextItem(hChildItem, TVGN_NEXT);
        }
    }
}
В справке я не нашел способа как проверять состояние чекбокса, пришлось анализировать uStateOld и uStateNew и изобретать велосипед.
 
3) принудительно выделяю тот item, по которому кликнули.

Код:
CPPageFormats.h
...
    afx_msg void OnTVItemClick(NMHDR *pNMHDR, LRESULT *pResult);
...
 
CPPageFormats.cpp
...
BEGIN_MESSAGE_MAP(CPPageFormats, CPPageBase)
    ON_NOTIFY(NM_CLICK, IDC_TREE1, OnTVItemClick)
END_MESSAGE_MAP()
...
void CPPageFormats::OnTVItemClick(NMHDR *pNMHDR, LRESULT *pResult)//NM_CLICK
{
    NM_TREEVIEW* p = (NM_TREEVIEW*)pNMHDR;
    m_formats.SelectItem(p->itemNew.hItem);
}

 
4) нашел решение если не работает функция SetCheck
http://www.codeguru.com/forum/showthread.php?t=197692
http://www.rsdn.ru/forum/mfc/588040.1.aspx

Код:
//remove and add the checkbox style.
m_ctrlTree.ModifyStyle( TVS_CHECKBOXES, 0 );
m_ctrlTree.ModifyStyle( 0, TVS_CHECKBOXES );

чтобы бага не было, нужно сначала убрать а потом вернуть стиль TVS_CHECKBOXES.

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 21:09 09-04-2011 | Исправлено: V0lt, 23:49 10-04-2011
HNKTO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как запрограммировать Combo Box Control в Windows.
Причём не созданный командой CreateWindow, а определённый в файле ресурсов
Очень хотелось - бы пример работающего кода, а ещё лучше посоветуйте какую нибудь на нормальном русском языке книжку по программированию элементов Windows Shell, т. к. я в программировании полный чайник.
Заранее спасибо.

Всего записей: 2093 | Зарегистр. 30-01-2010 | Отправлено: 20:54 29-06-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HNKTO
Ну, если есть желание изучить WinAPI, в самый раз будет начать с "Программирование для Windows 95" Петцольда. И не надо смотреть на "Windows 95" в названии, базовые принципы работы системы остаются теми же и сейчас.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:36 29-06-2011
ShIvADeSt



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

Цитата:
Ну, если есть желание изучить WinAPI, в самый раз будет начать с "Программирование для Windows 95" Петцольда. И не надо смотреть на "Windows 95" в названии, базовые принципы работы системы остаются теми же и сейчас.

Единственное исключение, если он хочет сделать ХР стайл контрол (чтобы отрабатывал наведение мыши и прочие красявости), тогда нужно дополнительно (после понимания азов) почитать дополнительно.

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

И еще, если мне память не изменяет, то отдельный контрол нельзя создать в файле ресурсов (меню не в счет), только диалог целиком.

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:14 30-06-2011
HNKTO



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

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

Ну типа рисую окно диалога, рисую на нём все контролы, инициализикую их в WM_CREATE диалогового окна, снимаю с них сообщения в WM_COMMAND диалогового окна и WM_SCROLL если это полосы прокрутки.
При таком подходе у меня не получается проинициализировать Combo Box Control, а дальше не знаю т. к. не выходит п1.
Если пишу CreateWindow(hwnd, COMBOBOX, ........) то инициализируется и работает, но цель - именно нарисованная версия.
 
Про Петзольда знаю. Только мне пока не достаёт мозгов, как набрать текст файлов-ресурсов, чтоб он потом в визуалстудии скомпилировался, а хочется типа щас а не потом.
Всем спасибо и заранее спасибо.

Всего записей: 2093 | Зарегистр. 30-01-2010 | Отправлено: 22:14 30-06-2011
Abs62



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

Цитата:
Ну типа рисую окно диалога, рисую на нём все контролы,

Где? В редакторе ресурсов? Или по ходу выполнения через CreateWindow?

Цитата:
инициализикую их в WM_CREATE диалогового окна

Диалоги используют WM_CREATE для собственных нужд. Программисту туда лезть не следует. Для пользовательской инициализации элементов используется WM_INITDIALOG. Это сообщение будет послано, когда система создаст окно диалога и все прописанные в ресурсах элементы на нём, но до того, как окно будет показано на экране.

Цитата:
Только мне пока не достаёт мозгов, как набрать текст файлов-ресурсов, чтоб он потом в визуалстудии скомпилировался

Так там же есть собственный редактор ресурсов?

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:44 30-06-2011
ShIvADeSt



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

Цитата:
Про Петзольда знаю. Только мне пока не достаёт мозгов, как набрать текст файлов-ресурсов, чтоб он потом в визуалстудии скомпилировался, а хочется типа щас а не потом.  

Я в рестораторе (Restorator) создавал файлы ресурсов, в Дельфи без проблем все подключалось. А Студии и свой отличный редактор есть - пользовался им еще когда винда 95 только появилась.

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:35 01-07-2011
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HNKTO
Возьми у меня с сайта последнее издание Петцольда с примерами - http://alexsoft.home.nov.ru/prog/index.htm ...

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 08:21 01-07-2011
user_MAN09

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в локалке на одном компе есть инет
как на С++ написать простой (без логов, пасов, и т.п.)
прокси сервер для раздачи инета на другой комп в локалке
может полезные ссылки,
или подскажите принцип работы прокси сервака для данного случая
для самостоятельного написания кода
 
спасибо за внимание

Всего записей: 37 | Зарегистр. 26-08-2010 | Отправлено: 23:02 24-07-2011
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В Windows есть настройка языка и региональных стандартов. Если, к примеру, там выбрать португальский язык, то в поле "Полная дата" появиться дата на португальском. Это можно использовать в своей программе? Т.е. требуется выводить дату на конкретном языке вне зависимости от того, что настроено в системе.

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 17:24 29-07-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для этого системные настройки трогать не требутся. Просто бери функцию GetDateFormat (или GetDateFormatEx) и выводи в нужном формате и на нужном языке.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:55 29-07-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Легко и просто. Используйте стандартную функцию GetDateFormat, только для параметра Locale сформируйте макросом MAKELCID идентификатор локали - и винда честным образом отформатирует переданую третьим параметром дату как вам нужно, на конкретном языке и даже его диалекте.
 
PS. Пока писал успели ответить выше.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 17:55 29-07-2011 | Исправлено: Molniev, 17:57 29-07-2011
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62, Molniev
Спасибо! А есть похожее для размера файла (нужно аббревиатуры для килобайтов, мегабайтов переводить)? А то StrFormatByteSizeW выдает на текущем языке, а нужно на указанном в настройках программы.
 

Всего записей: 10506 | Зарегистр. 05-02-2003 | Отправлено: 18:09 29-07-2011
judelaw

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста.  
В программировании не силен, но хочу в коде мрс-нс модифицировать класс CPlayerListCtrl, чтоб внедрить помимо существующих в нем CEdit, CComboBox, CListBox еще и СHotKey контрол. Возможно ли вообще такое провернуть?  
 
Делаю примерно как и для CEdit класса, прописывая класс CHotKeyCtrl - при компиляции имею типа такого:
PlayerListCtrl.obj : error LNK2019: unresolved external symbol "public: __thiscall CInPlaceHotKey::CInPlaceHotKey(int,int)" (??0CInPlaceHotKey@@QAE@HH@Z) referenced in function "public: class CHotKeyCtrl * __thiscall CPlayerListCtrl::ShowInPlaceHotKey(int,int)" (?ShowInPlaceHotKey@CPlayerListCtrl@@QAEPAVCHotKeyCtrl@@HH@Z)
 
Смысл всего этого: хочу переделать назначение горячих клавиш в плеере, заменив комбобокс с выбором готовых неудобных значений из списка, на контрол HotKey в таблице, чтоб легко и удобно для пользователя было горячие клавиатурные сочетания назначать.  
 
Спасибо.

Всего записей: 2830 | Зарегистр. 22-09-2009 | Отправлено: 00:05 08-08-2011
Abs62



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

Цитата:
Делаю примерно как и для CEdit класса, прописывая класс CHotKeyCtrl - при компиляции имею типа такого

Код смотреть надо. Судя по сообщениям линкера, не реализован конструктор класса CInPlaceHotKey с двумя целыми в качестве параметров.

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

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Спасибо!!! Подправил, получилось.
Только осталось как то значения научить сохранять в этом поле ....

Всего записей: 2830 | Зарегистр. 22-09-2009 | Отправлено: 00:56 08-08-2011
Открыть новую тему     Написать ответ в эту тему

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