Модераторы: Alexeis
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рисование в окне, WinAPI программа для КПК 
:(
    Опции темы
nikav
Дата 20.10.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 18.10.2009

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



   Добрый день! Вот пробую писать под КПК, то есть под Windows Mobile. Начал просто с рисования в окне. Проблема в том что когда открываешь меню или Пуск все нарисованное затирается. Когда открываешь клавиатуру нарисованное пропадает вообще. Я знаю что надо пользоваться примерно этим
Код

            g_hdc = GetDC(g_hWnd);
            memDC = CreateCompatibleDC(g_hdc);
            bmp = CreateCompatibleBitmap(g_hdc,cxClient,cyClient);
            SelectObject(memDC, bmp);
            BitBlt(g_hdc, 0, 0, cxClient, cyClient, memDC, 0, 0, SRCCOPY);

но не могу понять куда его влепить. Привожу текст функции WndProc, может кто-то подскажет.
Код

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    static SHACTIVATEINFO s_sai;

    process.Run(g_hWnd, message, wParam, lParam);
    
    switch (message) 
    {
        case WM_COMMAND:
            wmId    = LOWORD(wParam); 
            wmEvent = HIWORD(wParam); 
            
            // Обработка меню
            switch (wmId)
            {
                case IDM_HELP_ABOUT:
                    DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
                    break;
                case IDM_OK:
                    SendMessage(hWnd, WM_CLOSE, 0, 0);                
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_CREATE:
            
            SHMENUBARINFO mbi;
            memset(&mbi, 0, sizeof(SHMENUBARINFO));
            mbi.cbSize     = sizeof(SHMENUBARINFO);
            mbi.hwndParent = hWnd;
            mbi.nToolBarId = IDR_MENU;
            mbi.hInstRes   = g_hInst;
            if (!SHCreateMenuBar(&mbi)) 
            {
                g_hWndMenuBar = NULL;
            }
            else
            {
                g_hWndMenuBar = mbi.hwndMB;
            }
            memset(&s_sai, 0, sizeof (s_sai));
            s_sai.cbSize = sizeof (s_sai);
            break;
        case WM_PAINT:
            g_hdc = BeginPaint(hWnd, &ps);
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            CommandBar_Destroy(g_hWndMenuBar);
            PostQuitMessage(0);
            break;
        case WM_ACTIVATE:
            SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
            break;
        case WM_SETTINGCHANGE:
            SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

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


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 18.10.2009

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



Нашел событие WM_INITMENUPOPUP.
Если делаю так
Код

case WM_INITMENUPOPUP:
            g_hdc = GetDC(g_hWnd);
            memDC = CreateCompatibleDC(g_hdc);
            bmp = CreateCompatibleBitmap(g_hdc,cxClient,cyClient);
            SelectObject(memDC, bmp);
            BitBlt(g_hdc, 0, 0, cxClient, cyClient, memDC, 0, 0, SRCCOPY);
            ReleaseDC(g_hWnd,g_hdc);
            break;
    
то экран заливается черным. Может надо здесь что-то поменять? 
PM MAIL   Вверх
nikav
Дата 27.10.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 18.10.2009

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



Ну что, ни кто не знает что ли? Ни кто не писал рисавалку на КПК? Да хрен с ней с рисавалкой. В любой проге должна же быть перерисовка окна при выплывании меню. Я понимаю, это не самый интересный вопрос, ну все же, помогите начинающему.
PM MAIL   Вверх
Alexeis
Дата 28.10.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



nikav, принцип тот же что и в обычной винде. Если что-то затирается, то приложению шлют WM_PAINT. В нем следует делать отрисовку.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование мобильных устройств"
Alexeis

Раздел посвящен программированию мобильных устройств.

Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п),
не имеющие отношения к программированию, просьба размещать в разделе КПК, смартфоны, мобильники

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема »


 




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


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

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