Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / WinApi: красивое окно / 11 сообщений из 11, страница 1 из 1
28.11.2008, 11:55:00
    #35681458
KWS
KWS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Народ!
Ряд программ написанных на WinApi (то бишь без MFC) содержит довольно симпатичное окно - скругленные края, желный заголовок и т.п. Выглядит симпатично, что-то вроде "БаллонТипа".
Но не "подсказка" а все-таки главное окно. Поскольку проги от разных производителей, а окно 1 в 1, думаю нарисовано не "руками", а вызвано как-то стандартно. Может стили какие хитрые или функции.
Никто не подскажет как это сделано?

Ну и вторая часть вопроса - может кто подскажет как вообще главное окно посимпотнее сделать? Может ссылки есть какие или куски кода.

Похожей темы тут не нашел, но считаю ее важной для всех.
...
Рейтинг: 0 / 0
28.11.2008, 12:00:46
    #35681475
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
1. В WinAPI-программе можно использовать и VCL, и NET, и ActiveX и вместе.
2. Скругленные края делаются функций SetWindowRgn.
3. Окно симпатичным делается с помощью WM_PAINT, WM_DRAWITEM, WM_NCPAINT


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.11.2008, 13:22:52
    #35681795
KWS
KWS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Хм. Тогда вопрос - если все делают руками почему получается одинаково?
...
Рейтинг: 0 / 0
28.11.2008, 13:38:39
    #35681846
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Потому что используют компоненты или чужой код.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.11.2008, 13:48:54
    #35681889
KWS
KWS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Понятно. Спасибо.

Тогда просьба. Не поделитесь кодом или каким его кусочком? Чтобы хоть глазком глянуть, я в этом не очень силен. Сорри за наглость.
...
Рейтинг: 0 / 0
28.11.2008, 13:52:20
    #35681900
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Чего именно?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.11.2008, 14:08:27
    #35681963
KWS
KWS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Ну, украшательством каким.
...
Рейтинг: 0 / 0
28.11.2008, 14:24:45
    #35682026
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
...
Рейтинг: 0 / 0
28.11.2008, 14:32:17
    #35682059
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
// Этот обработчик может сильно отличатся, но принцип такой:

int wndProc(int mid,int wp,int lp) {
  if(mid==WM_DRAWITEM) {
    DRAWITEMSTRUCT* d = (DRAWITEMSTRUCT*)lp;
    if(d->hwndItem==button1.hwnd) {
      drawButton(button1, *d, getWindowText(d->hwndItem));
      return  0 ;
    }
  }
};

// Это рисование кнопки

void drawButton(Button& btn, DRAWITEMSTRUCT& d, string caption) {
  HDC hdc = d.hDC;
  inr x = d.rcItem.left;
  int y = d.rcItem.top;
  inr x1 = d.rcItem.right;
  int y1 = d.rcItem.bottom;

  // Тут рисуй, что хочешь.
  dc_fillRect(hdc,x,y,x1,y1,bg);
  dc_fillRect(hdc,x+ 8 ,y+ 8 ,x1- 8 ,y1- 8 ,buttonBg);
  dc_copy_m(hdc,x,y, 8 , 8 ,buttonsBmp,mode+ 0 , 0 );
  dc_copy_m(hdc,x1- 8 ,y, 8 , 8 ,buttonsBmp,mode+ 11 , 0 );
  dc_copy_m(hdc,x,y1- 8 , 8 , 8 ,buttonsBmp,mode+ 0 , 11 );
  dc_copy_m(hdc,x1- 8 ,y1- 8 , 8 , 8 ,buttonsBmp,mode+ 11 , 11 );
  dc_copy_z(hdc,x,y+ 8 , 8 ,y1-y- 16 ,buttonsBmp,mode+ 0 , 9 , 8 , 1 );
  dc_copy_z(hdc,x1- 8 ,y+ 8 , 8 ,y1-y- 16 ,buttonsBmp,mode+ 11 , 9 , 8 , 1 );
  dc_copy_z(hdc,x+ 8 ,y,x1-x- 16 , 8 ,buttonsBmp,mode+ 9 , 0 , 1 , 8 );
  dc_copy_z(hdc,x+ 8 ,y1- 8 ,x1-x- 16 , 8 ,buttonsBmp,mode+ 9 , 11 , 1 , 8 );
}

// А это мои функции, мне так удобнее писать (просто для примера)

void dc_copy_m(HDC hdc, int x, int y, int w, int h, const Bitmap& sbmp, int 
sx, int sy) {
  sbmp.prepareMask();
  DCCompatible cdc(hdc);
  SetTextColor(hdc,  0 );
  SetBkColor(hdc, 0xFFFFFF);
  { DCSelect sel(cdc.hdc, sbmp.andHandle);
    BitBlt(hdc, x, y, w, h, cdc.hdc, sx, sy, SRCAND); }
  { DCSelect sel(cdc.hdc, sbmp.orHandle);
    BitBlt(hdc, x, y, w, h, cdc.hdc, sx, sy, SRCPAINT); }
}

void dc_copy_z(HDC hdc, int x, int y, int w, int h, const Bitmap& sbmp, int 
sx, int sy, int sw, int sh) {
  DCCompatible cdc(hdc);
  SetTextColor(cdc.hdc,  0 );
  SetBkColor(cdc.hdc,  0 );
  DCSelect sel(cdc.hdc, sbmp.handle);
  StretchBlt(hdc, x, y, w, h, cdc.hdc, sx, sy, sw, sh, SRCCOPY);
}

class DCSelect {
public:
  HDC hdc;
  HGDIOBJ oldhandle;

  inline DCSelect(HDC _hdc, HANDLE handle) {
    hdc = _hdc;
    oldhandle = SelectObject(hdc, handle);
    if(oldhandle== 0  && GetLastError()!= 0 ) raise_os("SelectObject");
  }

  inline ~DCSelect() {
    if(oldhandle) SelectObject(hdc, oldhandle);
  }
};

class DCCompatible {
public:
  HDC hdc;

  inline DCCompatible(HDC _hdc) {
    hdc = CreateCompatibleDC(_hdc);
    if(hdc== 0 ) raise_os("CreateCompatibleDC");
  }

  inline ~DCCompatible() {
    if(hdc) if(!DeleteDC(hdc)) raise_os("DeleteDC");
  }
};



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.11.2008, 14:48:52
    #35682125
KWS
KWS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Спасибо всем кто откликнулся! Буду думать :)
...
Рейтинг: 0 / 0
28.11.2008, 14:49:45
    #35682131
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinApi: красивое окно
Думать вредно, от этого умирают.


Posted via ActualForum NNTP Server 1.4

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / WinApi: красивое окно / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]