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

Ваш аккаунт

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

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

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

Плоские штуковины.

8.3K
21 октября 2004 года
p01
8 / / 21.10.2004
Уважаемые.
Вот уже вторую неделю пытаюсь найти какие-либо доки/примеры по созданию плоских контролов посредством API (Скроллбары, окна и т.д.) - безрезультатно.
Научился только кнопки плоские ваять - это не сложно совсем. о_О

Прошу ответить на мои незамысловатые вопросы - каким образом можно создать плоское окошко а ля "дочернее WinSight'овское"?
И еще меня интересует создание плоского скроллбара.

Буду оч. рад даже самым скудным кусочкам кода. Желателен синтаксис MSVCPP (не MFC!).
Благодарю.
430
24 октября 2004 года
craftyfox
157 / / 20.02.2000
Не совсем понятно, что все-таки тебе нужно, окна
без Parent, или controls (и какие controls).
По поводу Flat Scroll Bars, есть такой готовый
control (так и называется), живет в comctl32.dll, в SDK подробно описан.
Вообще, в зависимости от конкретных целей, можно использовать разные способы.
Можно собственно WS_CHILD и использовать:
 
Код:
CreateWindowEx(WS_EX_TOPMOST,"MyWndClass","MyWndName,WS_CHILD|WS_BORDER,x,y,w,h,GetDesktopWindow(),...

Далее SetWindowPos и т.п.
Можно так же создать это окно "ребенком" какого-нить другого, потом SetParent(myHwnd,0).

Иногда, наверное, можно использовать regions
(SetWindowRgn), обрубая ненужные украшения.

Так же, можно обрабатывать WM_NCxxx сообщения (WM_NCPAINT,WM_NCACTIVATE,WM_NCCALCSIZE,WM_NCHITTEST и т.д., все или некоторые), обрабатывать их, правда весьма неудобно.
В этих статьях, хотя речь идет о другом
(рисование caption в MFC и задание размеров клиентской области) эти функции обсуждаются
http://www.microsoft.com/msj/0197/c/c0197.aspx
http://www.microsoft.com/msj/0697/c0697.aspx
http://msdn.microsoft.com/msdnmag/issues/04/10/cqa/default.aspx

Примерчик "плоского" окна с WS_OVERLAPPEDWINDOW
(правда, практически не тестировал):
Код:
int OnNcCalcSize(WPARAM wparam,LPARAM lparam)
{
    NCCALCSIZE_PARAMS* par=(NCCALCSIZE_PARAMS*)lparam;
    if(!par->lppos)
        return  DefWindowProc(m_hWnd,WM_NCCALCSIZE,wparam,lparam);
    int cxfr=GetSystemMetrics(SM_CXSIZEFRAME);
    int cyfr=GetSystemMetrics(SM_CYSIZEFRAME);
    InflateRect(par->rgrc,cxfr-1,cyfr-1);
    return DefWindowProc(m_hWnd,WM_NCCALCSIZE,wparam,lparam);
}

int OnNcPaint(WPARAM wparam,LPARAM lparam)
{
    int cxFr=GetSystemMetrics(SM_CXSIZEFRAME);
    int cyFr=GetSystemMetrics(SM_CYSIZEFRAME);
    int cyCap=GetSystemMetrics(SM_CYCAPTION);
    RECT rct,rct1;
    GetWindowRect(m_hWnd,&rct);
    CopyRect(&rct1,&rct);
    rct.left+=cxFr;
    rct.right-=cxFr;
    rct.top+=cyFr;
    rct.bottom=rct.top+cyCap;
    HRGN hRgnCaption = CreateRectRgnIndirect(&rct);
    OffsetRect(&rct1,-rct1.left,-rct1.top);
    HDC hdc=GetWindowDC(m_hWnd);
    Rectangle(hdc,rct1.left,rct1.top,rct1.right,rct1.bottom);
    ReleaseDC(m_hWnd, hdc);
    HRGN oldRgn=(HRGN)wparam;
    DefWindowProc(m_hWnd,WM_NCPAINT,(WPARAM)hRgnCaption,lparam);
    if((WORD)oldRgn>1)
        DeleteObject(oldRgn);
    return 0;
}
292
05 ноября 2004 года
Matush
726 / / 14.01.2004
HWND hList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "", WS_CHILD| LVS_REPORT| VS_SHOWSELALWAYS, 0, 0, 0, 0, g_hWnd, NULL, g_hInst, NULL);

ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES| LVS_EX_FLATSB);

InitializeFlatSB(hList);

FlatSB_EnableScrollBar(hList, SB_BOTH, ESB_ENABLE_BOTH);

И получаеться красивенький плоский скроллбар
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог