Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Вниз

Как средствами WinApi создать кнопку без пунктирной каймы???   Найти похожие ветки 

 
a_Lan   (2002-05-14 13:59) [0]

Может кто знает: как средствами WinApi создать кнопку без пунктирной каймы, такую же, как в окнах созданных из ресурсов (но не используя при этом самих ресурсов)!


 
Song   (2002-05-14 14:44) [1]

Пунктирная койма показывается на кнопке когда на неё передаётся фокус. Если поменять свойство TButton.TabStop каймы не будет :)


 
a_Lan   (2002-05-14 21:29) [2]

To Song >> С чего ты взял, что если поменять свойство TButton.TabStop пунктирного фокуса (каймы) не будет??? - Это первое... Второе: я просил показать как это сделать средствами WinApi - в момент создания кнопки:
CreateWindowEx(0,"button",nil,... or ws_child or ws_visible,X,Y,W,H,Window,0,hInstance,nil);


 
VuDZ   (2002-05-14 22:43) [3]

обрабатывать WM_PAINT для этой кнопки


 
a_Lan   (2002-05-15 01:21) [4]

To VuDZ: Да? А приведи пример, пожалуйста...


 
Evgeny   (2002-05-15 05:34) [5]

Если я не ошибаюсь, то параметр WS_TABSTOP подразумевается при создании окна. Соответственно чтобы не было пунктирной рамки на кнопке, т.е. не передавался фокус, требуется написать not WS_TABSTOP


 
a_Lan   (2002-05-15 09:27) [6]

To Evgeny >> Интересная идея, но, к сожалению, в жизнь она не воплощается!


 
VuDZ   (2002-05-15 10:05) [7]

в WindowProc
1. обрабатываешь все мессаги, и когда они приходят для дочернего окна - твоей кнопки - перерисовываешь её сам
2. если приходит сообщение WM_SETFOCUS, то возвращать 0, не пересылая его кнопке...

примерно та, в общих чертах :>


 
a_Lan   (2002-05-15 12:28) [8]

To VuDZ >> Пожалуйста, VuDZ, приведи конкретный пример.


 
VuDZ   (2002-05-15 20:09) [9]

I can"t do this - у меня сейчас тут не установлен ни VC++ ни MSDN, вообще ничего, даже VBA нету :<


 
Evgeny   (2002-05-16 05:41) [10]

Разницы где ты создаешь кнопку в ресурсе или в теле программы нет. Если хочешь чтобы у тебя получилось нечто наподобие SpeedButton т.е. без получения фокуса, то для этого имеются разные варианты. Можно указать флаги WS_BITMAP или WS_ICON. Кнопки созданные с этими флагами не имеют пунктирной каймы (текста тоже). Можно выставить WS_OWNERDRAW и тогда вся забота об отрисовке кнопки ложится на программиста. При этом обрабатывается сообщение WM_DRAWITEM, где и производится отрисовка внешнего вида кнопки, рисунков и текста на ней. Это самый подходящий способ, здесь уже все зависит от широты фантазии.


 
a_Lan   (2002-05-16 19:04) [11]

Evgeny >> Нет, SpeedButton мне не нужен... да и кнопку без каймы проще создать с помощью DrawText (или TextOut), а не так, как предлагаешь ты, НО, дело в том, что все это изврат! Ладно, спасибо...


 
Evgeny   (2002-05-17 05:38) [12]

>a_Lan
это изврат

Вообще-то изврат это VCL, а то что описал я - стандартные способ работы WinAPI. Судя по заданному вопросу тяжело придумать другой ответ, тем более, что вопрос содержит неверное утверждение

> как в окнах созданных из ресурсов

как я уже описывал выше, нет разницы, где создавать класс.
Функции DrawText (или TextOut) занимаются выводом текста, но никак не отрисовкой кнопок. Так во всяком случае утверждает справка. Будь добр - сформулируй вопрос полнее и получишь более полный ответ.


 
a_Lan   (2002-05-17 09:51) [13]

Evgeny >> Чувствую, скоро мой вопрос перенесут в категорию потрепаться, но все-таки я хочу закончить последним (раз уж никто не может предложить толковых идей).

"Кнопка баз каймы" - это кнопка либо вообще не содержащая на себе никакой информации -

CreateWindowEx(0,"button", NIL ,ws_child or ws_visible,100,100,100,100,Window,0,hInstance,nil);

(не обязательно для этого использовать WS_BITMAP или WS_ICON - тем более что они от каймы не избавят, дабы при первом же появлении на кнопке какого-либо рисунка (или иконки), на ней снова появиться несчастная кайма), либо созданная из ресурса диалога -

{
CONTROL "OK", IDOK, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 100, 100, 100, 100
}
.

Я предлагаю кинуть на пустую кнопку текст ( DrawText(HDC,"Text",4,T,dt_center);), а при изменении состояния кнопки на форме обновлять DrawText (к примеру, в WM_PAINT)! Ты же, Evgeny, предлагаешь рисовать всю кнопку ЗАНОВО (WS_OWNERDRAW)!

Мне же нужно что-нибудь более простое (например, добавление какого либо флага при создании кнопки или простое отключение этой каймы), но раз никто не знает как это можно сделать более рационально или просто, тогда не имеет никакого смысла разводить пустую болтовню.

Спасибо за внимание, искренне желаю удачи на тяжелом поприще программирования!


 
Игорь Шевченко   (2002-05-17 10:29) [14]

a_Lan © (17.05.02 09:51)

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

Какую кайму вы имеете в виду ?


 
Толик   (2002-05-17 12:29) [15]

Насколько я понял, вопрос заключается в том, как обойти вызов DrawFocusRect. Если это так то можно:

1. использовать DrawFrameControl (см. Help)
2. добавить к стилям кнопки BS_OWNERDRAW и рисовать её руками (не вызывая DrawFocusRect)
3. не задавать окну кнопки текст, а рисовать его на кнопке руками (только текст)
4. ловить сообщение BN_SETFOCUS и не пускать его на кнопку через DefWindowProc (см. Help)


 
Игорь Шевченко   (2002-05-17 13:16) [16]

TabStop в false у кнопки поставить...
Все остальное, IMHO, извраты. :-)))


 
Толик   (2002-05-17 14:13) [17]

to Игорь Шевченко ©:
Ну не встанет фокус на кнопку при Tab, но после кликанья мышью всё равно кайма будет. Так что не всё так просто. :)


 
Игорь Шевченко   (2002-05-17 15:08) [18]

Толик © (17.05.02 14:13)
Обычно кнопки, на которые нельзя встать табуляцией, закрывают окно. В противном случае, на OnClick просто передавать фокус на другой Control.

С уважением,



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
1-58087
Dankin
2002-07-08 02:19
2002.07.18
Help PLEASE


3-57990
nitro313
2002-06-26 05:03
2002.07.18
Как организовать поиск в таблице table1 по принципу...


1-58224
UserName
2002-07-07 10:35
2002.07.18
программный скроллинг в TWebBrowser


1-58218
SkyQuake
2002-07-04 20:17
2002.07.18
Потоки и картинки, картинки и потоки...


1-58215
Коля
2002-07-06 17:47
2002.07.18
Нужно возвести в квадрат





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский