Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как создать свое окно? К примеру круглое.

23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
Как создать свое окно? К примеру круглое.:)
Хочется нарисовать его в фотожопе и юзать.
268
02 февраля 2007 года
Михаил
587 / / 25.06.2005
используй регионы
rgn:HRGN;
rgn:=CreateEllipticRGN(0,0,100,100);
23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
Отличный ответ. А по конкретней. Регионы юзать умею. Как спрятать стандартное окно и создать свое. Можно даже кодом в меня бросить. Я не обижусь.
268
02 февраля 2007 года
Михаил
587 / / 25.06.2005
создаешь регион, а затем присваиваешь окну этот регион SetWindowRGN
23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
Создавать в WM_CREATE?
268
02 февраля 2007 года
Михаил
587 / / 25.06.2005
можно наверное и там, попробуй. А можно и до цикла обработки сообщений
23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
Спасибо, что натолкнул. :) Сейчас буду мучать и еще задавать вопросы.
23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
Отлично. Окно круглое. Теперь следующий вопрос.
Та часть которая осталась - обрабатывается виндой. Кусок строки с названием окна и т.д. Как мне самостоятельно обработать все сообщния. Может я не очень выражаюсь. Я хочу к примеру, чтоб окно тягалось за любую его часть. Просто сейчас идет четкое разделение областей. А мне надо это побороть. (Ну и бред написал. Если не понятно - я постараюсь пояснить)
268
02 февраля 2007 года
Михаил
587 / / 25.06.2005
ну, в windows сообщениях я не очень, но попробуй послать сообщение вроде WM_SYSCOMMAND wparam или lparam $F012
23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
Однако
268
02 февраля 2007 года
Михаил
587 / / 25.06.2005
что однако?
23K
02 февраля 2007 года
Mister_X
10 / / 02.02.2007
int arp[80][2]={
{100,15},{90,8},{80,3},{75,2},{70,1},{65,0},{55,0},{50,1},{35,5},{30,8},
{25,11},{20,15},{15,20},{11,25},{8,30},{5,35},{3,40},{2,45},{1,50},{0,55},
{0,65},{1,70},{2,75},{3,80},{6,85},{9,90},{12,95},{16,100},{20,105},{25,110},
{30,115},{35,120},{42,125},{49,130},{56,135},{64,140},{72,145},{80,150},{90,155},{100,160},
{100,160}, {110,155},{118,150},{127,145},{135,140},{143,135},{150,130},{157,125},{164,120},{170,115},
{175,110},{180,105},{184,100},{188,95},{191,90},{194,85},{196,80},{197,75},{198,70},{199,65},
{199,55},{198,50},{198,45},{197,40},{195,35},{192,30},{189,25},{185,20},{180,15},{175,11},
{170,8},{165,5},{150,1},{130,1},{125,2},{120,3},{110,8},{100,15},{100,15},{100,15}
};

POINT P[80];
for (unsigned short int i=0; i<80; i++)
{
P.x=arp[0];
P.y=arp[1];
}
HRGN hRgn = CreatePolygonRgn(P, 80, WINDING);
SetWindowRgn(hwnd,hRgn,true);
1.9K
02 февраля 2007 года
InterWen
331 / / 16.09.2006
ГЫ! Ну я и не утверждал своей хотя бы частичной вменяемости :D

[COLOR="Gray"]блин, вот-вот, вместо правки того поста, случайно грохнул и все[/COLOR]


Хотя, это ещё что... Видел когда-то красЫвую формулу ("график конопли") прорисовки небезизвестного листка (с зубчиками, все как положено), вот это реально готично :D А может кто напомнит, как бы сердце по формуле отрисовать ("задницеобразное", а не "остромордое")?
334
03 февраля 2007 года
HexEdit
809 / / 27.07.2006
Цитата: Mister_X
Отлично. Окно круглое. Теперь следующий вопрос.
Та часть которая осталась - обрабатывается виндой. Кусок строки с названием окна и т.д. Как мне самостоятельно обработать все сообщния. Может я не очень выражаюсь. Я хочу к примеру, чтоб окно тягалось за любую его часть. Просто сейчас идет четкое разделение областей. А мне надо это побороть. (Ну и бред написал. Если не понятно - я постараюсь пояснить)


Чтобы убрать заголовок, убери флаг стиля WS_CAPTION.

А чтобы перетаскивать за любое место - обрабатывай WM_LBUTTONDOWN

 
Код:
.... // WM_LBUTTONDOWN
        SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
26K
03 февраля 2007 года
ZUG_CUG
3 / / 03.02.2007
двигать окно где бы ты не кликнул?тогда
case WM_MOUSEMOVE:
x=LOWORD(wParam);
y=HIWORD(wParam);
.......
case WM_LBUTTONDOWN:
if("проверить не двигается ли мышь"......."не помню как;))))")
MoveWindow("не помню что)))",x,y);

можно конечно вложить это все только в case WM_LBUTTONDOWN:,
но мне опыта не хватает....впрочем его воще нет...я только учусь)))
а что бы клик на окне но не в регионе проскакивал на другую программу

case WM_NCHITTEST:
return(LRESULT) HTTRANSPARENT;

вроде бы так ...посмотри в мсдн про HTTRANSPARENT может там другие идендификаторы найдутся

Увидели лажу?киньте камнем))))
26K
03 февраля 2007 года
ZUG_CUG
3 / / 03.02.2007
вопрос в догонку...

как сделать часть окна прозрачной?
покажите код...
26K
03 февраля 2007 года
ZUG_CUG
3 / / 03.02.2007
эт опять я)))
никак не пому понять как присобачить ресурс (иконка и курсор)..
должно рисоваться иконка в раб.обасти и курсор меняется на свой.
..
wndclass.hIcon = LoadIcon(hInstance, szAppName);
wndclass.hCursor = LoadCursor(hInstance, szAppName);
...
case WM_CREATE :
hIcon = LoadIcon(hInst, szAppName); //не работает!!!
cxIcon = GetSystemMetrics(SM_CXICON);
cyIcon = GetSystemMetrics(SM_CYICON);
return 0;
case WM_PAINT :
hdc = BeginPaint(hwnd, &ps);
for(y = cyIcon; y <"экран по икс"; y += 2 * cyIcon)
for(x = cxIcon; x < "экран по игрек"; x += 2 * cxIcon)
DrawIcon(hdc, x, y, hIcon); //не рисуется зараза!!!

курсор остаётся последним при вхождении в раб.область..."часы" например при создании...
меняется только иконка в панели задач.
укажите правильную последовательность компиляции и линка к проекту(вдруг я не в том порядке делаю)...вылез какой то resourse.h в нём ничего не надо менять???

надеюсь понятно изъяснился)))
268
03 февраля 2007 года
Михаил
587 / / 25.06.2005
2ZUG_CUG
вы знаете, вы влезли не в ту тему, создайте свою и там спрашивайте себе на здоровье
334
03 февраля 2007 года
HexEdit
809 / / 27.07.2006
[QUOTE=ZUG_CUG]двигать окно где бы ты не кликнул?тогда
case WM_MOUSEMOVE:
x=LOWORD(wParam);
y=HIWORD(wParam);
.......
case WM_LBUTTONDOWN:
if("проверить не двигается ли мышь"......."не помню как;))))")
MoveWindow("не помню что)))",x,y);[/QUOTE]
Зачем такое извращение?! Я же выше написал рабочий и удобный(!), как с точки зрения программера, так и системы, код!
[quote=ZUG_CUG]
а что бы клик на окне но не в регионе проскакивал на другую программу

case WM_NCHITTEST:
return(LRESULT) HTTRANSPARENT;[/quote]
При установке региона, оставшаяся область окна и так становится прозрачной (полностью)
355
03 февраля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
то что предложил HexEdit это тоже небольшое насилие над природой. лучше обрабатывать WM_NCHITTEST и возвращать HTCAPTION на необходимой области
http://base.soobcha.org/index/coding.delphi.gui.forms/4075/
334
04 февраля 2007 года
HexEdit
809 / / 27.07.2006
нда, спс... хоть и менее удобно, но лучше... респект... буду иметь ввиду
355
04 февраля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
почему менее удобно?
334
07 февраля 2007 года
HexEdit
809 / / 27.07.2006
[QUOTE=<SCORP>;171680]почему менее удобно?[/QUOTE]
Дольше... и кода больше... мне так показалось))) мож случано :)
355
08 февраля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата: HexEdit
Дольше... и кода больше... мне так показалось))) мож случано :)


 
Код:
case WM_NCHITTEST:
{
    LRESULT lr = DefWindowProc(hWnd, message, wParam, lParam);
    if (HTCLIENT == lr)
        return HTCAPTION;
    else
        return lr;
}
355
08 февраля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата:
 
Код:
.... // WM_LBUTTONDOWN
        SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);


будешь смеятся, но с таким кодом при щелчке мышью в клиентской области окна, оно закрывается :D

334
08 февраля 2007 года
HexEdit
809 / / 27.07.2006
Незнаю, смеяться не буду... Но проверил еще раз, у меня все норм...

А по поводу твоего способа (который ты предложил) я не спорю, а наоборот поддерживаю. Удобно, а иногда бывает и необходимо))
355
08 февраля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
[QUOTE=<SCORP>;172623]будешь смеятся, но с таким кодом при щелчке мышью в клиентской области окна, оно закрывается :D[/QUOTE]
соррри! лоханулся как последнейший ламерюга!
 
Код:
case WM_LBUTTONDOWN:
        SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
    case WM_DESTROY:
        PostQuitMessage(0);
        break;

мне стыдно!
334
09 февраля 2007 года
HexEdit
809 / / 27.07.2006
Да ладно... у кого не бывает:) сам иногда глупые ошибки делаю... бывает по часу разыскиваю, что не так, а оказывается что все дело в какой-то фигне))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог