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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не рисуется график в диалоговом окне 
:(
    Опции темы
Andrej78
Дата 18.1.2011, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день.

Есть вопрос:
Пишу в VS2005 на с++ просто под winapi.

т.к. пока что не умею рисовать кнопки на основном окне кодом, открыл диалоговое окно и нарисовал все контролы на нем через Resource View.

Еще понадобилось нарисовать график, желательно на этом же диалоговом окне.

Сделал код, программа выполняется без ошибок, но никакого графика не рисует и даже текст не выводит.
Подскажите пожалуйста в чем ошибка.

Код с куском ф-ии ниже:

Код

INT_PTR CALLBACK Dialog2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
                   ...
                  case WM_COMMAND:
                                if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
                                ...
        else if (LOWORD(wParam) == IDC_PAINT) {    //кнопка Paint
            PAINTSTRUCT ps;
            HDC hdc;
            RECT Rect1;
            HBRUSH hBrush;

            hdc = BeginPaint(hDlg, &ps);
            TextOutW(hdc,50,10,L"Настройки программы:",20);


            hBrush=(HBRUSH)GetStockObject(3);
            Rectangle(hdc,50,20,500,300);
            SetRect(&Rect1,501,21,899,299);
            FillRect(hdc,&Rect1,hBrush);
            for (int nnn=200;nnn<500;nnn++) SetPixel(hdc,nnn,150,RGB(0,250,0));
            
            EndPaint(hDlg, &ps);
            
            return (INT_PTR)TRUE;
        }
    }//switch (message)


PM MAIL   Вверх
Dem_max
Дата 18.1.2011, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



посмотри на этот кусок кода
Код

//---------------------------------------------------------------------------

#include <windows.h>
#define ID_BUTTON 100
HINSTANCE g_hInst;
HDC g_hMemDC, hDC;
HBITMAP hOldBitmap;
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);


//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    MSG msg;
     MyRegisterClass(hInstance);
     if (!InitInstance (hInstance, nCmdShow))
     {
          return FALSE;
     }

     while (GetMessage(&msg, NULL, 0, 0))
     {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
     }

     return (int) msg.wParam;
}
//---------------------------------------------------------------------------



ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

     wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
     wcex.hIcon          = NULL;
     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
     wcex.hbrBackground  = (HBRUSH)(COLOR_BTNSHADOW);
     wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = "FRM_MEMDC";
    wcex.hIconSm        = NULL;

    return RegisterClassEx(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   g_hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow("FRM_MEMDC", "FRM_MEMDC", WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
        return FALSE;
    }

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    return TRUE;
}

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

    switch (message)
    {
    case WM_CREATE:
        {

              hDC = ::GetDC(NULL);
           g_hMemDC=::CreateCompatibleDC(hDC);
            HBITMAP hBitmap=::CreateCompatibleBitmap(::GetDC(hWnd),
                     ::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
                 hOldBitmap = (HBITMAP)::SelectObject(g_hMemDC,hBitmap);
                     RECT rect;
                      ::GetClientRect(hWnd,&rect);
                      FillRect(g_hMemDC, &rect, (HBRUSH) (COLOR_WINDOW+1));

                ::CreateWindow("BUTTON","buton",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
                10,10,100,50,hWnd,(HMENU)ID_BUTTON,g_hInst,NULL);
                break;
          }
     case WM_COMMAND:
          wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
          switch (wmId)
        {
        case ID_BUTTON:
                {

                     HPEN pen = CreatePen(PS_SOLID,4,RGB(255,0,0));
                     HPEN oldpen = (HPEN)SelectObject(g_hMemDC,pen);
                     Ellipse(g_hMemDC,200,200,300,300);
                     SelectObject(g_hMemDC, oldpen);
                     ::InvalidateRect(hWnd,NULL,FALSE);
                break;
                }
        default:
                return DefWindowProc(hWnd, message, wParam, lParam);
          }
          break;
     case WM_PAINT:
          hdc = BeginPaint(hWnd, &ps);
          RECT rect;
          ::GetClientRect(hWnd,&rect);
          ::BitBlt(hdc,0,0,rect.right,rect.bottom,g_hMemDC,0,0,SRCCOPY);
          EndPaint(hWnd, &ps);
          break;
     case WM_DESTROY:
          ::SelectObject(g_hMemDC,hOldBitmap);
         DeleteObject(hOldBitmap);
            DeleteDC(g_hMemDC);
          ReleaseDC(NULL, hDC);
          PostQuitMessage(0);
          break;
     default:
          return DefWindowProc(hWnd, message, wParam, lParam);
     }
     return 0;
}



Это сообщение отредактировал(а) Dem_max - 18.1.2011, 19:05


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
миг
Дата 18.1.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



когда нажимаешь на кнопку твоему диалоговому окну должно отсылаться сообщение WM_PAINT.. а при обработке этого сообщения пытайся прорисовать, то что тебе нужно.
--------------------
Oaks may fall when reeds stand the storm.
PM MAIL   Вверх
Dem_max
Дата 19.1.2011, 05:37 (ссылка)  | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Цитата

когда нажимаешь на кнопку твоему диалоговому окну должно отсылаться сообщение WM_PAINT.. а при обработке этого сообщения пытайся прорисовать, то что тебе нужно.

Вообще то очень не кошерно рисовать в WM_PAINT. Мой пример очень даже кошерный.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Andrej78
Дата 19.1.2011, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, буду разбираться.
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.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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