Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» C++ WinAPI

Автор: V0lt
Дата сообщения: 15.02.2011 20:25
Ладно, пусть будет NULL. Главное работает.
Спасибо.
Автор: V0lt
Дата сообщения: 24.02.2011 06:20
Еще момент. Нажимаю правую кнопку мыши, появляется меню. Еще раз нажимаю ПКМ, меню изчезает и появляется снова.
Как сделать, чтобы в этом случае меню только исчезало?
C PeekMessage такое сделать не получается.
Автор: Abs62
Дата сообщения: 24.02.2011 08:08
V0lt
Ну да, тут так просто не получится. Меню закроется по WM_RBUTTONDOWN. В этот момент юзер кнопку мыши отпустить ещё не успел, так что WM_RBUTTONUP, по которому меню всплывает, просто ещё нет в очереди. Оно придёт, когда обработчик OnMenu уже своё отработает. Когда работа с меню давно уже завершилась и программа пребывает в благодушном неведении.
Так что тут без геморроя не обойтись. Придумать какой-нибудь флаг, разобраться, когда взводить его, когда сбрасывать... Стоит ли игра свеч?
Автор: ShIvADeSt
Дата сообщения: 24.02.2011 09:03

Цитата:
Еще момент. Нажимаю правую кнопку мыши, появляется меню. Еще раз нажимаю ПКМ, меню изчезает и появляется снова.
Как сделать, чтобы в этом случае меню только исчезало?

стандартное поведение винды, зачем его переиначивать?
Автор: V0lt
Дата сообщения: 24.02.2011 19:16
ShIvADeSt

Цитата:
стандартное поведение винды, зачем его переиначивать?

стандартное не всегда удобное.

Abs62

Цитата:
Меню закроется по WM_RBUTTONDOWN. В этот момент юзер кнопку мыши отпустить ещё не успел, так что WM_RBUTTONUP, по которому меню всплывает, просто ещё нет в очереди. Оно придёт, когда обработчик OnMenu уже своё отработает. Когда работа с меню давно уже завершилась и программа пребывает в благодушном неведении.

Я идею понял, спасибо. Найду время, посмотрю стоит оно того или нет.


Еще пара моментов со всплывающими подсказками:
1. Есть CSliderCtrl. Когда двигаю его мышкой появляется подсказка над слайдером. Когда - клавишами, тогда подсказки нет. Это ведь ненормально? Или тут ее нужно как-то самому нарисовать?
2. Есть обычный текст (CTEXT). Можно ли к нему прикрутить всплывающую подсказку?
Автор: Abs62
Дата сообщения: 24.02.2011 20:27
V0lt

Цитата:
1. Есть CSliderCtrl. Когда двигаю его мышкой появляется подсказка над слайдером. Когда - клавишами, тогда подсказки нет. Это ведь ненормально?

Сам слайдер подсказок по идее не показывает. При перемещении ползунка мышкой посылаются нотификационные сообщения TB_THUMBTRACK. Клавиатурой - TB_LINEUP и TB_LINEDOWN. Смотри, как реализована обработка тех и других в программе.

Цитата:
2. Есть обычный текст (CTEXT). Можно ли к нему прикрутить всплывающую подсказку?

Можно. Получить хэндл соответствующего окна и переопределить его оконную функцию. Далее ловить в ней WM_MOUSEMOVE и вызывать TrackMouseEvent на трекинг TME_HOVER. Потом ловить WM_MOUSEHOVER. Поймав - показывать подсказку и включать трекинг TME_LEAVE, чтобы поймать момент ухода мыши. Отслеживать WM_MOUSELEAVE, поймав - убрать подсказку. Как-то так.
Автор: V0lt
Дата сообщения: 24.02.2011 21:35
Abs62

Цитата:
Сам слайдер подсказок по идее не показывает. При перемещении ползунка мышкой посылаются нотификационные сообщения TB_THUMBTRACK. Клавиатурой - TB_LINEUP и TB_LINEDOWN. Смотри, как реализована обработка тех и других в программе

Прогнал поиск ничего такого не нашел.
Вначале подсказок не было. Я добавил стил TBS_TOOLTIPS. Появились подсказка над ползунком, показывающая текущую позицию, но только если его двигать мышью. Текст подсказки менял через OnToolTipNotify.


Цитата:
Можно. Получить хэндл соответствующего окна и переопределить его оконную функцию. Далее ловить в ней WM_MOUSEMOVE и вызывать TrackMouseEvent на трекинг TME_HOVER. Потом ловить WM_MOUSEHOVER. Поймав - показывать подсказку и включать трекинг TME_LEAVE, чтобы поймать момент ухода мыши. Отслеживать WM_MOUSELEAVE, поймав - убрать подсказку. Как-то так.

ну нафиг

Кстати для статического теста нашел стиль SS_NOTIFY

Цитата:
SS_NOTIFY
Sends the parent window STN_CLICKED, STN_DBLCLK, STN_DISABLE, and STN_ENABLE notification codes when the user clicks or double-clicks the control.

Его можно как-то использовать вместо такой обработки двойного клика.
Автор: Abs62
Дата сообщения: 24.02.2011 22:12
V0lt

Цитата:
ну нафиг

Почитай ещё вот это:
DOC: How to Display Tool Tips After Calling EnableToolTips
Может, в MFC этот функционал уже есть. Я не проверял.

Цитата:
Его можно как-то использовать вместо такой обработки двойного клика.

Дык, проверь. Задай этот стиль контролу и лови STN_DBLCLK в родительском окне.
Автор: ShIvADeSt
Дата сообщения: 25.02.2011 03:47

Цитата:
Можно. Получить хэндл соответствующего окна и переопределить его оконную функцию. Далее ловить в ней WM_MOUSEMOVE и вызывать TrackMouseEvent на трекинг TME_HOVER. Потом ловить WM_MOUSEHOVER. Поймав - показывать подсказку и включать трекинг TME_LEAVE, чтобы поймать момент ухода мыши. Отслеживать WM_MOUSELEAVE, поймав - убрать подсказку. Как-то так.

В реалии все не так страшно, как звучит. Кстати можно вместо статика заюзать ownerdraw кнопку, для нее хинт вешается без проблем. а рисовать что нажатую что отпущенную одинаково. Будет неотличимо от статика, а пользы больше (вплоть до отслеживания нажатия кнопок мыши).
Автор: user_MAN09
Дата сообщения: 27.02.2011 14:44
Всем привет! В VS 2008 пишу прогу на С++.
Ошибка:error C2065: LVM_ARRANGE: необъявленный идентификатор
нужно подключить какую-то библиотеку или это из-за ОС Win7
Автор: Abs62
Дата сообщения: 27.02.2011 15:08
user_MAN09
А Windows SDK установлен?
Автор: user_MAN09
Дата сообщения: 01.03.2011 19:42
Хор вопрос!): делал полную установку VS 2008 и SDK устанавливалась,

-в установленных прогах есть:

MW SDK for VS 2008: .Net Framework Tools, Headers and Libraries, SDK Referense Assembliese adn IntelliSense, Tools, Win32 Tools. не знаю куда больше):

Вообще занимаюсь Фленову С++ глазами хакера, иногда бывают ошибки,

эти методы или функ GetItemPath, MakeDynamic VS 2008 тоже не видит?

Может Win7 и VS 2008 не очень совместимы, лучше поставить VS 2010/
Автор: karakurt2
Дата сообщения: 01.03.2011 19:44
user_MAN09, скорее всего, это устаревшее макроопределение.
Автор: user_MAN09
Дата сообщения: 01.03.2011 20:08
Наверное так есть, благ
Автор: Abs62
Дата сообщения: 01.03.2011 20:24
user_MAN09
Для программирования под Windows всегда желательно иметь свежий Windows SDK. В хидерах и библиотеках Visual Studio есть не всё.
А для работы с DirectX, к примеру, ещё и DirectX SDK потребуется.

Цитата:
эти методы или функ GetItemPath, MakeDynamic VS 2008 тоже не видит?

Должен видеть.

Цитата:
Может Win7 и VS 2008 не очень совместимы, лучше поставить VS 2010

Не уверен, что это избавит от необходимости установки Windows SDK.

karakurt2

Цитата:
скорее всего, это устаревшее макроопределение

Это сообщение. И отнюдь не помеченное как устаревшее в MSDN.
Автор: user_MAN09
Дата сообщения: 01.03.2011 20:36
Попробую поставить SDK, может поможет,
но думаю в VS по умолч должны быть такие простые фукнц
Автор: ItsJustMe
Дата сообщения: 03.03.2011 04:34
на данный момент с VS 2010 идет самый свежий SDK, если поставишь ее, SDK дополнительно ставить не придется.
Автор: user_MAN09
Дата сообщения: 03.03.2011 13:38
ItsjustMe:
Хочу воспользоваться твоим советом,
не знаю где найти для скачивания проф версию VS 2010
Автор: vlary
Дата сообщения: 03.03.2011 22:09
user_MAN09 Надо побольше читать форум, тогда будешь в курсе.
Microsoft Visual Studio .NET
Автор: user_MAN09
Дата сообщения: 04.03.2011 09:31
Спасибо и полностью согласен!
Автор: user_MAN09
Дата сообщения: 05.03.2011 07:45
Всем привет. Такая проблема (по Фленову):

на протяжении всей книги все строки или функ приходится переводить
из 'char [__]' в 'LPCWSTR'

к примеру функ MessageBox(0, szRecvBuff, L"Recived data", 0);

к строке "Recived data" применяю L или _T (макросы?),
к szRecvBuff (объявлен как char) LPCWSTR

приводит при компиляции к


1>TCPClient.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__closesocket@4 в функции "unsigned long __stdcall NetThread(void *)" (?NetThread@@YGKPAX@Z)
1>TCPClient.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__recv@16 в функции "unsigned long __stdcall NetThread(void *)" (?NetThread@@YGKPAX@Z)
Автор: karakurt2
Дата сообщения: 05.03.2011 10:21
user_MAN09 это функции из winsock, добавьте сборщику ссылку на библиотеку ws2_32.lib или wsock32.lib.
Автор: user_MAN09
Дата сообщения: 05.03.2011 15:56
Спас! Главное в предыдущем примере дорбавлял эту библиотеку! А че за тема с приведение ти приведением строк?

Добавлено:
Кто читал Фленова, вопрос?

Глава 4.7. Приводится описание функций DWORD WINAPI ClientThread(LPVOID lpParam),
DWORD WINAPI NetThread(LPVOID lpParam),
но я так думаю пропущен их вызов в int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)?

как правильно осуществить вызов?
заранее благ!
User.

Автор: HelioSS
Дата сообщения: 12.03.2011 08:59
Как элементу Text Control присвоить и свойство BnClicked? То есть надо сделать что-то типа гиперссылки, но чтобы по клику выполнялись любые действия, а не только открытие html-страницы
Автор: Abs62
Дата сообщения: 12.03.2011 11:28
HelioSS
Что имеется в виду под "Text Control"? Если обычный static control, то есть несколько вариантов. Один - задать ему стиль SS_NOTIFY и ловить сообщение STN_CLICKED в родительском окне. Другой - ловить в родительском окне WM_LBUTTONDOWN и проверять место, куда попал клик. Разбирался пару страниц назад. Ещё вариант - переопределить оконную функцию static control и ловить WM_LBUTTONDOWN там.
Автор: karakurt2
Дата сообщения: 12.03.2011 13:04
видимо, имеется ввиду SysLink control. есть ещё Paul DiLascia's CStaticLink control.
Автор: V0lt
Дата сообщения: 13.03.2011 08:47
Есть CSliderCtrl. Как нибудь можно убрать крайние засечки (tics), не трогая средние?
Автор: XPEHOMETP
Дата сообщения: 14.03.2011 00:26
V0lt

Цитата:
If you do not specify TBS_AUTOTICKS, you can use member functions, such as SetTic and SetTicFreq, to specify the positions of the tick marks.
Автор: Abs62
Дата сообщения: 14.03.2011 00:38
XPEHOMETP
SetTic просто дёргает SendMessage(m_hWnd, TBM_SETTIC, 0, nTic), а тут есть любопытное ограничение:

Цитата:
A trackbar creates its own first and last tick marks. Do not use this message to set the first and last tick marks.
Автор: V0lt
Дата сообщения: 14.03.2011 19:12
Немного поясню проблему. У меня CSliderCtrl с диапазоном от -30 до 100. Мне нужна засечка на 0. Когда я его добавляю появляются засечки на краях, вроде не страшно, но они длиннее чем та которая между ними. А хотелось бы наоборот, чтобы ноль выделялся, а крайние были незаметны.
Может тут надо самому фон под слайдером рисовать или как подобное делают?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

Предыдущая тема: посоветуйте книги по SQL


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.