информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsСетевые кракеры и правда о деле ЛевинаАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32] Я примерно так и пытаюсь сделать 13.08.01 05:13  Число просмотров: 879
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
отрисовываю картинку в CompatibleDC, потом копирую всю в диалог, а кусочки соотв. размера натягиваю через BitBlt на кнопки. Только геморно все это, если бы кнопки просто прозрачные были, было бы на порядок проще...
<programming>
[Win32] Как в МFC сделать кнопку невидимой, но работающей? 03.08.01 14:34  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Задача: покрыть кнопки WMF-картинкой нарисованной на поверхности родительского окна или в другом дочернем окне (во все родительское) так, чтобы их не было видно, но они работали. Т.е. вызывали ф-цию OnClick, меняли курсор при наезде и выдавали всплывающую подсказку? Этакий веб-подобный интерфейс в проге. У меня не получается, родительское окно в последнюю очередь получает WM_PAINT и кнопки на нем прорисовываются поверх картинки. Не МFC -решения не предлагать, сам знаю несколько, только геморройно ето очень...
[Win32] Как в МFC сделать кнопку невидимой, но работающей? 10.08.01 12:47  
Автор: Ruslan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Регионы - это хорошо, но вот одна проблема встает, можно так сказать... Как зверюгу отслеживать будешь????
Самое нормальное - это сделать кусок картинки как окно!!! И принимать сообщения от нажатий мыши (WM_LMBUTTONDOWN и т. д.).
Просто если разобраться любой компонент интерфейса - это окно!!!!!! И из этого надо и исходить!!!!!
[Win32] Я примерно так и пытаюсь сделать 13.08.01 05:13  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
отрисовываю картинку в CompatibleDC, потом копирую всю в диалог, а кусочки соотв. размера натягиваю через BitBlt на кнопки. Только геморно все это, если бы кнопки просто прозрачные были, было бы на порядок проще...
[Win32] Я примерно так и пытаюсь сделать 13.08.01 06:00  
Автор: Ruslan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> отрисовываю картинку в CompatibleDC, потом копирую всю в
> диалог, а кусочки соотв. размера натягиваю через BitBlt на
> кнопки. Только геморно все это, если бы кнопки просто
> прозрачные были, было бы на порядок проще...Слушай, так сделай ее через CS_OWNERDRAW (можно рисовать окно или облать), а лучше сделай квадрат, типа рамки и отрабатывай нажатие мышу!!!
Я ща не помню, как это сделать, но я это делал. Я дома посмотрю, если у меня что-нить осталось, то пришлю на мыло или в форум брошу.
[Win32] Я примерно так и пытаюсь сделать 13.08.01 06:29  
Автор: Ruslan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > отрисовываю картинку в CompatibleDC, потом копирую
> всю в
> > диалог, а кусочки соотв. размера натягиваю через
> BitBlt на
> > кнопки. Только геморно все это, если бы кнопки просто
> > прозрачные были, было бы на порядок проще...Слушай,
> так сделай ее через CS_OWNERDRAW (можно рисовать окно или
> облать), а лучше сделай квадрат, типа рамки и отрабатывай
> нажатие мышу!!!
> Я ща не помню, как это сделать, но я это делал. Я дома
> посмотрю, если у меня что-нить осталось, то пришлю на мыло
> или в форум брошу.
Посмотри вот это, находилось в MSDN:
BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam)
{
HDC hdcMem;
LPDRAWITEMSTRUCT lpdis;

switch (message)
{
case WM_INITDIALOG:

// hinst, hbm1 and hbm2 are defined globally.
hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1");
hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2");
return TRUE;

case WM_DRAWITEM:
lpdis = (LPDRAWITEMSTRUCT) lParam;
hdcMem = CreateCompatibleDC(lpdis->hDC);

if (lpdis->itemState & ODS_SELECTED) // if selected
SelectObject(hdcMem, hbm2);
else
SelectObject(hdcMem, hbm1);

// Destination
StretchBlt(
lpdis->hDC, // destination DC
lpdis->rcItem.left, // x upper left
lpdis->rcItem.top, // y upper left

// The next two lines specify the width and
// height.
lpdis->rcItem.right - lpdis->rcItem.left,
lpdis->rcItem.bottom - lpdis->rcItem.top,
hdcMem, // source device context
0, 0, // x and y upper left
32, // source bitmap width
32, // source bitmap height
SRCCOPY); // raster operation

DeleteDC(hdcMem);
return TRUE;

case WM_COMMAND:
if (wParam == IDOK
|wParam == IDCANCEL)
{
EndDialog(hDlg, TRUE);
return TRUE;
}
if (HIWORD(wParam) == BN_CLICKED)
{
switch (LOWORD(wParam))
{
case IDC_OWNERDRAW:

// application-defined processing

break;
}
}
break;

case WM_DESTROY:
DeleteObject(hbm1); // delete bitmaps
DeleteObject(hbm2);

break;

}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}

Если делать еще проще, то надо поверх картинки рисовать прямоугольник и в нем отслеживать мышь...
поставь у батона флажок OwnerDraw и забудь его нарисовать... (0) 04.08.01 00:32  
Автор: musliya Статус: Незарегистрированный пользователь
<"чистая" ссылка>
сабж
[Win32] С этого я и начал. Тока кнопка все равно всплывает... 06.08.01 05:26  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
пробовал делать картинку в дочернем статик-окне, но если оно топ - то кнопки под ним не бычат, а если нет - то они все равно просвечивают пустыми квадратиками. Я так думаю: надо как-то прибить обработку кнопками WM_PAINT или посылку его родительским окном, вот тока как?
можно попробовать SetWindowRgn 06.08.01 15:52  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> пробовал делать картинку в дочернем статик-окне, но если
> оно топ - то кнопки под ним не бычат, а если нет - то они
> все равно просвечивают пустыми квадратиками. Я так думаю:
> надо как-то прибить обработку кнопками WM_PAINT или посылку
> его родительским окном, вот тока как?

Когда-нибудь видели окна с закругленными углами? Такие вещи делаются вроде через SetWindowRgn. Можно задать регион в один пиксел или вообще пустой. Только не знаю, куда в этом случае пойдут клики...
и еще способ (криво, но может сработать) 06.08.01 16:05  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Можно наверное и через OwnerDraw, только нужно рисовать не пустое место, а в точности то, что под этой кнопкой должно находиться. Если, скажем, родительскому окну этой кнопки послать GetPixel - вернется ли цвет ПОД кнопкой, или цвет кнопки? В первом случае можно содрать требуемую картинку в родительском окне и нарисовать ее в качестве морды кнопки - вот и эффект невидимости.
и еще способ (криво, но может сработать) 08.08.01 01:29  
Автор: False_Delirium Статус: Незарегистрированный пользователь
<"чистая" ссылка>
CreateRectRgn
CombineRgn
SetWindowRgn
Вот вам три ф-ции....вырезаешь заднифон(за кнопкой) и комбинируешь регионы....всё просто....она прозрачна...
А кого SetWindowRgn? Подстилающего окна? 08.08.01 08:52  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
0
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach