Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wm_ncpaint для диалога, wm_ncpaint приходит не всегда 
V
    Опции темы
mekhanikus
Дата 5.12.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Ловлю WM_NCPAINT в немодальном диалоге.
Меседж приходит только если диалог перекрывается другим окном, или сдвигается за край экрана.
Хотелось бы получать его всегда.
Код взял с какого-то сайта:

Код

case WM_NCPAINT:
{
RECT rc1, rc2;
    HDC hDC;
    int x, y;
    DefWindowProc( hwnd, uMsg, wParam, lParam );
    hDC = GetWindowDC( hwnd );
    GetWindowRect( hwnd, (LPRECT)&rc2 );

    x = GetSystemMetrics( SM_CXSIZE ) +
    GetSystemMetrics( SM_CXBORDER ) +
    GetSystemMetrics( SM_CXFRAME );
    y = GetSystemMetrics( SM_CYFRAME );
    rc1.left = x;
    rc1.top = y;

    rc1.right = rc2.right - rc2.left - 2*x - GetSystemMetrics( SM_CXFRAME );
    rc1.bottom = GetSystemMetrics( SM_CYSIZE );

    SetBkMode(hDC, TRANSPARENT);
    SetTextColor(hDC, RGB(255, 255, 0));
    DrawText( hDC, (LPSTR)"MobileIP - Status", -1, (LPRECT)&rc1, DT_CENTER );
    ReleaseDC( hwnd, hDC );
    break;
}

PM MAIL   Вверх
GremlinProg
Дата 5.12.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(mekhanikus @  5.12.2009,  15:06 Найти цитируемый пост)
Меседж приходит только если диалог перекрывается другим окном, или сдвигается за край экрана.

наоборот:
1. когда открывается из под другого окна
2. выдвигается из-за края экрана
Цитата(mekhanikus @  5.12.2009,  15:06 Найти цитируемый пост)
Хотелось бы получать его всегда.

оно приходит всегда, когда нужно перерисовать "неклиента"
Цитата(mekhanikus @  5.12.2009,  15:06 Найти цитируемый пост)
в немодальном диалоге

именно в диалоге такой вызов должен быть трижды взвешен:
Цитата(mekhanikus @  5.12.2009,  15:06 Найти цитируемый пост)
DefWindowProc( hwnd, uMsg, wParam, lParam );



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mekhanikus
Дата 6.12.2009, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Цитата(GremlinProg @  5.12.2009,  13:34 Найти цитируемый пост)
1. когда открывается из под другого окна
2. выдвигается из-за края экрана

Да, так и есть.
Цитата(GremlinProg @  5.12.2009,  13:34 Найти цитируемый пост)
оно приходит всегда, когда нужно перерисовать "неклиента"

Понимаю, но, разве при начальном выводе диалога этого делать не надо?
Почему при этом не приходит WM_NCPAINT?
Цитата(GremlinProg @  5.12.2009,  13:34 Найти цитируемый пост)
именно в диалоге такой вызов должен быть трижды взвешен:

Пример привел в первоначальном виде.
Удаление вызова DefWindowProc проблемы не решает. Пробовал.
PM MAIL   Вверх
GremlinProg
Дата 6.12.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(mekhanikus @  6.12.2009,  08:00 Найти цитируемый пост)
но, разве при начальном выводе диалога этого делать не надо?Почему при этом не приходит WM_NCPAINT?

можно взглянуть на код, инициализирующий диалог, может даже еще и процедуру диалога?

при начальном выводе диалога сообщение так же должно приходить


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mekhanikus
Дата 7.12.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Вот пример с модальным диалогом. Результат тотже.

main.cpp

Код

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>

BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL DlgOnInitDialog(HWND,HWND,LPARAM);
void DlgOnCommand(HWND,int,HWND,LPARAM);

int WINAPI WinMain (HINSTANCE hInst,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nFunsterStil)
{
    InitCommonControls();
    int i = DialogBox(hInst,"BirthDay",NULL,DlgProc);
    return i;
}

BOOL CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {
        HANDLE_MSG(hwnd,WM_INITDIALOG,DlgOnInitDialog);
        HANDLE_MSG(hwnd,WM_COMMAND,DlgOnCommand);
        case WM_NCPAINT:
        {
            RECT rc1, rc2;
            HDC hDC;
            int x, y;
//            DefWindowProc( hwnd, message, wParam, lParam );
            hDC = GetWindowDC( hwnd );
            GetWindowRect( hwnd, (LPRECT)&rc2 );

            x = GetSystemMetrics( SM_CXSIZE ) +
            GetSystemMetrics( SM_CXBORDER ) +
            GetSystemMetrics( SM_CXFRAME );
            y = GetSystemMetrics( SM_CYFRAME );
            rc1.left = x;
            rc1.top = y;

            rc1.right = rc2.right - rc2.left - 2*x - GetSystemMetrics( SM_CXFRAME );
            rc1.bottom = GetSystemMetrics( SM_CYSIZE );

            SetBkMode(hDC, TRANSPARENT);
            SetTextColor(hDC, RGB(255, 255, 0));
            DrawText( hDC, (LPSTR)"MobileIP - Status", -1, (LPRECT)&rc1, DT_CENTER|DT_VCENTER|DT_SINGLELINE );
            ReleaseDC( hwnd, hDC );
            return 0;
//            break;
        }
        default:
            return FALSE;
    }
}

BOOL DlgOnInitDialog(HWND hwnd,HWND,LPARAM)
{
    return true;
}

void DlgOnCommand(HWND hwnd,int id,HWND,LPARAM)
{
        switch(id)
        {
            case IDCANCEL:
            EndDialog(hwnd,0);
        }
}


BirthDay.rc

Код

BirthDay DIALOGEX 6,6,168,76
LANGUAGE 25,1
CAPTION "День рождения"
FONT 8,"MS Sans Serif",0,0
STYLE 0x80C808C8
BEGIN
  CONTROL "Имя юбиляра",1000,"Button",0x50000007,4,5,158,67
  CONTROL "Фамилия:",1001,"Static",0x50000200,8,18,40,9
  CONTROL "Имя:",1002,"Static",0x50000200,8,35,40,9
  CONTROL "Отчество:",1003,"Static",0x50000200,8,51,40,9
  CONTROL "",1004,"Edit",0x50010000,50,16,106,15,0x00000200
  CONTROL "",1005,"Edit",0x50010000,50,33,106,15,0x00000200
  CONTROL "",1006,"Edit",0x50010000,50,49,106,15,0x00000200
END

PM MAIL   Вверх
GremlinProg
Дата 7.12.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(mekhanikus @  7.12.2009,  13:40 Найти цитируемый пост)
Результат тотже

теперь понятно, т.е. результат - текст на посреди заголовка окна, а не приход события WM_NCPAINT
Цитата(mekhanikus @  7.12.2009,  13:40 Найти цитируемый пост)
(LPSTR)"MobileIP - Status"

явное приведение к LPSTR тут не нужно, наверное
Цитата(mekhanikus @  7.12.2009,  13:40 Найти цитируемый пост)
return 0;

если вернуть FALSE, значит будет вызвана процедура по-умолчанию, т.е. заголовок снова затрется
если вернуть TRUE, значит обработка сообщения на том и закончится

в данном случае нужно вернуть TRUE
Цитата(mekhanikus @  7.12.2009,  13:40 Найти цитируемый пост)
void DlgOnCommand(HWND hwnd,int id,HWND,LPARAM)

здесь, как я понимаю, должен кричать warning (не прямо здесь, конечно, но здесь его причина ),
кричать должен в конце самой DlgProc
Цитата(mekhanikus @  7.12.2009,  13:40 Найти цитируемый пост)

//            DefWindowProc( hwnd, message, wParam, lParam );

вместо DefWindowProc здесь должен стоять DefDlgProc, хотя в данном случае результат будет тот же,
но это лучше просто сразу запомнить

Добавлено через 8 минут и 24 секунды
Цитата(GremlinProg @  7.12.2009,  14:09 Найти цитируемый пост)
кричать должен в конце самой DlgProc

или прямо на обработчике:
Цитата(mekhanikus @  7.12.2009,  13:40 Найти цитируемый пост)
HANDLE_MSG(hwnd,WM_COMMAND,DlgOnCommand);




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mekhanikus
Дата 7.12.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Цитата(GremlinProg @  7.12.2009,  12:09 Найти цитируемый пост)
если вернуть FALSE, значит будет вызвана процедура по-умолчанию, т.е. заголовок снова затрется
если вернуть TRUE, значит обработка сообщения на том и закончится

А какже тогда:
Код

An application should return zero if it processes this message. 


С DefDlgProc программа вываливается с сообщением:
Код

Process terminated with status -1073741819 (0 minutes, 0 seconds)


Оставил DefWindowProc, если его заремить, рамка вообще не рисуется, как и предполагалось.

Вынес обработчик в отдельную функцию (через макрос HANDLE_MSG) - снова не работает.  smile 

Пришлось подредактировать windowsx.h:
Код

#define HANDLE_WM_NCPAINT(hwnd,wParam,lParam,fn) (BOOL)((fn)((hwnd),(HRGN)(wParam)))
//#define HANDLE_WM_NCPAINT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HRGN)(wParam)),0)

Насколько это правильно?
PM MAIL   Вверх
mekhanikus
Дата 7.12.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Всеравно не работает так как надо.
Надпись пропадает.
Код

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>

BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL DlgOnInitDialog(HWND,HWND,LPARAM);
BOOL DlgNCPaint(HWND,HRGN);
void DlgOnCommand(HWND,int,HWND,LPARAM);

int WINAPI WinMain (HINSTANCE hInst,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nFunsterStil)
{
    InitCommonControls();
    HWND hwnd = CreateDialog(hInst,"BirthDay",NULL,DlgProc);
//    int i = DialogBox(hInst,"BirthDay",NULL,DlgProc);
    ShowWindow(hwnd,SW_SHOWDEFAULT);

    MSG messages;
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return 0;
}

BOOL CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {
        HANDLE_MSG(hwnd,WM_INITDIALOG,DlgOnInitDialog);
        HANDLE_MSG(hwnd,WM_COMMAND,DlgOnCommand);
        HANDLE_MSG(hwnd,WM_NCPAINT,DlgNCPaint);
        default:
            return FALSE;
    }
}

BOOL DlgOnInitDialog(HWND hwnd,HWND,LPARAM)
{
    return true;
}

BOOL DlgNCPaint(HWND hwnd, HRGN hRgn)
{
    Beep(1000,10);
    RECT rc1, rc2;
            HDC hDC;
            int x, y;
            DefWindowProc( hwnd,WM_NCPAINT,(WPARAM)hRgn,(LPARAM)0);
            hDC = GetWindowDC( hwnd );
            GetWindowRect( hwnd, (LPRECT)&rc2 );

            x = GetSystemMetrics( SM_CXSIZE ) +
            GetSystemMetrics( SM_CXBORDER ) +
            GetSystemMetrics( SM_CXFRAME );
            y = GetSystemMetrics( SM_CYFRAME );
            rc1.left = x;
            rc1.top = y;

            rc1.right = rc2.right - rc2.left - 2*x - GetSystemMetrics( SM_CXFRAME );
            rc1.bottom = GetSystemMetrics( SM_CYSIZE );

            SetBkMode(hDC, TRANSPARENT);
            SetTextColor(hDC, RGB(255, 255, 0));
            DrawText( hDC, (LPSTR)"MobileIP - Status", -1, (LPRECT)&rc1, DT_CENTER|DT_VCENTER|DT_SINGLELINE );
            ReleaseDC( hwnd, hDC );
            return TRUE;//FALSE;//
}

void DlgOnCommand(HWND hwnd,int id,HWND,LPARAM)
{
        switch(id)
        {
            case IDCANCEL:
                PostQuitMessage(0);
//            EndDialog(hwnd,0);
        }
}
Код



PM MAIL   Вверх
GremlinProg
Дата 7.12.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(mekhanikus @  7.12.2009,  17:17 Найти цитируемый пост)
А какже тогда:Без подсветки1:An application should return zero if it processes this message. 

процедура окна и процедура диалога - не одно и то же, смешивать их в куче не надо
Цитата(mekhanikus @  7.12.2009,  17:17 Найти цитируемый пост)
Пришлось подредактировать windowsx.h

это делать не надо, у самой функции-обработчика WM_NCPAINT должно быть 2 параметра, а не 3
Цитата(mekhanikus @  7.12.2009,  17:46 Найти цитируемый пост)
Всеравно не работает так как надо.Надпись пропадает.

когда?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mekhanikus
Дата 8.12.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Цитата(GremlinProg @  7.12.2009,  16:41 Найти цитируемый пост)
у самой функции-обработчика WM_NCPAINT должно быть 2 параметра, а не 3

Ну, правильно.
Параметры функции я не менял: 
Код

//#define HANDLE_WM_NCPAINT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HRGN)(wParam)),0)        //было так
#define HANDLE_WM_NCPAINT(hwnd,wParam,lParam,fn) (BOOL)((fn)((hwnd),(HRGN)(wParam)))  //сделал так

2 параметра: HWND и HRGN.
Я добавил тип возвращаемого значения - BOOL.
Цитата(GremlinProg @  7.12.2009,  16:41 Найти цитируемый пост)
когда?

Когда окно из активного пассивным делается, и наоборот.
Цитата(GremlinProg @  7.12.2009,  16:41 Найти цитируемый пост)
процедура окна и процедура диалога - не одно и то же

Опять эта мистическая формула.  smile 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Example.rar 3,38 Kb
PM MAIL   Вверх
GremlinProg
Дата 8.12.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(mekhanikus @  8.12.2009,  17:04 Найти цитируемый пост)
Ну, правильно.Параметры функции я не менял: 

не надо ни чего менять менять в windowsx.h,
если хочешь переделать макрос, заведи собственный
Цитата(mekhanikus @  8.12.2009,  17:04 Найти цитируемый пост)
Я добавил тип возвращаемого значения - BOOL.

Цитата(mekhanikus @  8.12.2009,  17:04 Найти цитируемый пост)
Опять эта мистическая формула. 

макросы в windowsx.h вообще не для функции диалога сделаны,
это макросы для работы в процедуре окна

процедура окна: http://msdn.microsoft.com/en-us/library/ms633573(VS.85).aspx
функция диалога: http://msdn.microsoft.com/en-us/library/ms645469(VS.85).aspx

все остальное работает как обычно:
Код

BOOL CALLBACK DlgProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    switch( msg ){
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
            switch( LOWORD( wParam ) ){
                case IDCANCEL:
                    PostQuitMessage(0);
                    //EndDialog(hwnd,0);
                    break;
            }
            break;
        case WM_NCPAINT:{
            RECT rc;
            HDC hDC;
            ::DefWindowProc( hwnd, WM_NCPAINT, wParam, lParam );
            ::GetWindowRect( hwnd, &rc );
            ::OffsetRect( &rc, -rc.left, -rc.top );
            hDC = ::GetWindowDC( hwnd );
            ::SetBkMode( hDC, TRANSPARENT );
            ::SetTextColor( hDC, RGB(255, 0, 0) );
            ::DrawText( hDC, _T("MobileIP - Status"), -1, &rc, DT_CENTER | DT_TOP | DT_SINGLELINE );
            ::ReleaseDC( hwnd, hDC );
            return TRUE;
        }
    }
    return FALSE;
}


ps: да, с DefDlgProc я погорячился, она вызывает рекурсию, если ее использовать в функции диалога (ее используют в процедуре окна диалога)


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 8.12.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



да, действительно, сейчас заметил: при смене активности между 2-мя окнами,
перерисовка "неклиента" не вызывается ( скорее всего, вызывается DrawCaption, прямо из WM_NCACTIVATE ),
приходится вызывать самому :
Код

BOOL CALLBACK DlgProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    switch( msg ){
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
            switch( LOWORD( wParam ) ){
                case IDCANCEL:
                    PostQuitMessage(0);
                    //EndDialog(hwnd,0);
                    break;
            }
            break;
        case WM_NCACTIVATE:
            ::RedrawWindow( hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME );
            break;
        case WM_NCPAINT:{
            RECT rc;
            HDC hDC;
            ::DefWindowProc( hwnd, WM_NCPAINT, wParam, lParam );
            ::GetWindowRect( hwnd, &rc );
            ::OffsetRect( &rc, -rc.left, -rc.top );
            hDC = ::GetWindowDC( hwnd );
            ::SetBkMode( hDC, TRANSPARENT );
            ::SetTextColor( hDC, RGB(255, 0, 0) );
            ::DrawText( hDC, _T("MobileIP - Status"), -1, &rc, DT_CENTER | DT_TOP | DT_SINGLELINE );
            ::ReleaseDC( hwnd, hDC );
            return TRUE;
        }
    }
    return FALSE;
}

можно конечно оптимизировать: вырезать регион клиента из обновления RedrawWindow


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 8.12.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



вот так аккуратнее:
Код

case WM_NCACTIVATE:{
    RECT rw,rc;
    HRGN hrgnNonClient, hrgnClient;
    //
    ::GetWindowRect( hwnd, &rw );
    ::MapWindowPoints( HWND_DESKTOP, hwnd, (POINT*)&rw, 2 );
    hrgnNonClient    = ::CreateRectRgnIndirect( &rw );
    //
    ::GetClientRect( hwnd, &rc );
    hrgnClient        = ::CreateRectRgnIndirect( &rc );
    ::CombineRgn( hrgnNonClient, hrgnNonClient, hrgnClient, RGN_DIFF );
    ::DeleteObject( hrgnClient );
    //
    ::SetWindowLong( hwnd, DWL_MSGRESULT, ::DefWindowProc( hwnd, WM_NCACTIVATE, wParam, lParam ) );
    ::RedrawWindow( hwnd, NULL, hrgnNonClient, RDW_INVALIDATE | RDW_FRAME );
    //
    ::DeleteObject( hrgnNonClient );
    return TRUE;
}


Это сообщение отредактировал(а) GremlinProg - 10.12.2009, 13:38


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mekhanikus
Дата 9.12.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Благодарю!
Сейчас будем обмозговывать.

Добавлено через 4 минуты и 52 секунды
Цитата(GremlinProg @  8.12.2009,  16:09 Найти цитируемый пост)
процедура окна: http://msdn.microsoft.com/en-us/library/ms633573(VS.85).aspx
функция диалога: http://msdn.microsoft.com/en-us/library/ms645469(VS.85).aspx

Достает толстую засаленую общую тетрадь, слюнявит карандаш:
"Щас будем конспектировать. По-другому не доходит."  smile 
PM MAIL   Вверх
mekhanikus
Дата 10.12.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Всетаки в case WM_NCACTIVATE должно быть так:
Код

::SetWindowLong( hwnd, DWL_MSGRESULT, ::DefWindowProc( hwnd, WM_NCACTIVATE, wParam, lParam ) );

Подредактировал пример под свои нужды.
Пока доволен.  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1203 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.