информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаВсе любят медSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Я примерно так и пытаюсь сделать 13.08.01 05:13  Число просмотров: 819
Автор: 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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach