Важная информация
Показано с 1 по 2 из 2

Тема: win api рисование

  1. #1 win api рисование 
    Новичок
    Регистрация
    08.09.2012
    Сообщений
    16
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Не могу разобраться как сделать что бы при рисовании фигуры изменение размера фигур прорисовывалось, знаю что делается это посредством WM_MOUSEMOVE но как именно не пойму.
    main.cpp
    Код :
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        OPENFILENAME ofn;
        char szFileName[MAX_PATH];
        LPTSTR szFile = L"sdfsjd;lfksjd;flksjdfl;skdjf;sldkfjs;ldkfjs;dlfkjs;dflksdjf;lskdjf;lsdkfjs;ldkfjs;ldfl";
        static HBRUSH hBrush;
        static HENHMETAFILE file1 = 0;
        static int nextshape = 0;
        static vector <Shape *> allshape;
        static vector <Shape *> deletedshape;
        static int countshape = 0;
        //static BOOL mLine=FALSE, mRecttangle=FALSE, Ellips=FALSE, mCircle=FALSE, PAINTING=FALSE;
        static Shape *shape = NULL;
        POINT xy;
     
        switch (message)
        {
        case WM_PAINT:
            for( int i = 0; i < countshape; i++ )
                allshape[i]->draw(hdc);
            break;
        case WM_LBUTTONDOWN:
            if( shape == NULL )
            {
                deletedshape.clear();
                switch (nextshape)
                {
                    case 0: shape = new mRectangle();   break;
                    case 1: shape = new mCircle();      break;
                    case 2: shape = new mTriangle();    break;
                    case 3: shape = new mPolygon();    
                    allshape.push_back(shape);
                    countshape++;                       break;
                    case 4: shape = new mText();        break;
                    case 5: shape = new mLine();        break;
                    case 6: shape = new elips();        break;
                };
            };
            xy.x=LOWORD(lParam); //узнаём координаты
            xy.y=HIWORD(lParam);
            shape->addpoint(xy,1);
            break;
        case WM_LBUTTONUP:
            xy.x=LOWORD(lParam); //узнаём координаты
            xy.y=HIWORD(lParam);
            shape->addpoint(xy, 1);
            if( shape->allow() )
                shape->addpoint(xy,1);
            else
            {
                allshape.push_back( shape );
                countshape++;
                shape = NULL;
            };
     
            InvalidateRect(hWnd, NULL, false);
            UpdateWindow(hWnd);
     
            break;
        case WM_RBUTTONDOWN:
            if( (nextshape == 3) && (shape != NULL) )
            {
                xy.x = 0;
                xy.y = 0;
                shape->addpoint( xy, 0 );
                shape = NULL;
                InvalidateRect(hWnd, NULL, false);
                UpdateWindow(hWnd);
            };
            break;
     
        case WM_MOUSEMOVE:
            if(MK_LBUTTON==wParam)
            {
                if (nextshape = 5)
                {
                    xy.x=LOWORD(lParam); //узнаём координаты
                    xy.y=HIWORD(lParam);    
                    hdc = GetDC(hWnd);
                MoveToEx(hdc, xy.x, xy.y, NULL);
                LineTo(hdc, xy.x, xy.y);
                ReleaseDC(hWnd, hdc);
                }
            }
     
            break;
     
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 1201: nextshape = 1;       break;
                case 1211: nextshape = 0;       break;
                case 1202: nextshape = 5;       break;
                    case 1203: nextshape = 6;       break;
                case 1213: nextshape = 3;       break;
                case 1103: PostQuitMessage(0);  break;
                case 1301: if(countshape <= 0 ) break;
                    deletedshape.push_back(allshape[countshape-1]);
                    countshape--;
                    allshape.pop_back();
                    InvalidateRect(hWnd, NULL, false);
                    UpdateWindow(hWnd);         break;
                case 1302: if( deletedshape.size() <= 0 ) break;
                    allshape.push_back(deletedshape[deletedshape.size()-1]);
                    countshape++;
                    deletedshape.pop_back();
                    InvalidateRect(hWnd, NULL, false);
                    UpdateWindow(hWnd);         break;
                case 1104:
                    RECT rc;
     
                    rc.left = 0;
                    rc.right = GetDeviceCaps(hdc, HORZRES);
                    rc.top = 0;
                    rc.bottom = GetDeviceCaps(hdc, VERTRES);
                    int iWidthMM;
                    iWidthMM = GetDeviceCaps(hdc, HORZSIZE);
                    int iHeightMM;
                    iHeightMM = GetDeviceCaps(hdc, VERTSIZE);
                    int iWidthPels;
                    iWidthPels = GetDeviceCaps(hdc, HORZRES);
                    int iHeightPels;
                    iHeightPels = GetDeviceCaps(hdc, VERTRES);
                    rc.left = (rc.left * iWidthMM * 100)/iWidthPels;
                    rc.top = (rc.top * iHeightMM * 100)/iHeightPels;
                    rc.right = (rc.right * iWidthMM * 100)/iWidthPels;
                    rc.bottom = (rc.bottom * iHeightMM * 100)/iHeightPels;
     
                    OPENFILENAME ofn;
     
                    char szFileName[MAX_PATH];
     
                    ZeroMemory(&ofn, sizeof(ofn));
     
                    ofn.lStructSize = sizeof(ofn);
                    ofn.hwndOwner = NULL;
                    ofn.lpstrFilter = (LPCWSTR)L"EMF (*.emf)\0*.emf\0All Files (*.*)\0*.*\0";
                    ofn.lpstrFile = (LPWSTR)szFileName;
                    ofn.lpstrFile[0] = '\0';
                    ofn.nMaxFile = MAX_PATH;
                    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                    ofn.lpstrDefExt = (LPCWSTR)L"emf";
                    GetSaveFileName(&ofn);
     
                    filehdc = CreateEnhMetaFile( NULL, ofn.lpstrFile, &rc, NULL);
                                                break;
                case 1102:
                    hBrush = ( HBRUSH ) GetStockObject( HOLLOW_BRUSH );//настройка кисти
                    SelectObject( filehdc, hBrush );
                    for( int j = 0; j < countshape; j++ )
                    {
                        allshape[j]->draw(filehdc);
                    }
                    CloseEnhMetaFile(filehdc);
                                                break;
                case 1101:      
                    ZeroMemory(&ofn, sizeof(ofn));
                    ofn.lStructSize = sizeof(ofn);
                    ofn.hwndOwner = NULL;
                    ofn.lpstrFilter = (LPCWSTR)L"EMF (*.emf)\0*.emf\0All Files (*.*)\0*.*\0";
                    ofn.lpstrFile = (LPWSTR)szFileName;
                    ofn.lpstrFile[0] = '\0';
                    ofn.nMaxFile = MAX_PATH;
                    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                    ofn.lpstrDefExt = (LPCWSTR)L"emf";
                    GetOpenFileName( &ofn );
                     file1 = GetEnhMetaFile(ofn.lpstrFile);
     
                     RECT newrc;
                     newrc.left = 0;
                     newrc.right = GetDeviceCaps(hdc, HORZRES);
                     newrc.top = 0;
                     newrc.bottom = GetDeviceCaps(hdc, VERTRES);
                     PlayEnhMetaFile(hdc, file1, &newrc);
                     CloseEnhMetaFile(filehdc);
                         break;
                case 5555:
                    //RECT lpRect;
                    ENHMFENUMPROC lpEnhMetaFunc;
                    LPVOID lpData;
                    EnumEnhMetaFile(hdc, file1, lpEnhMetaFunc, lpData, &rc);
                                                break;
            };
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
            break;
        }
     
        return 0;
    }
     
    int CALLBACK EnhMetaFileProc (HDC hdc, HANDLETABLE * lpHTable, const ENHMETARECORD * lpEMFR, int nObj, LPARAM lpData)
    {
        PostQuitMessage(0);
        return 0;
    };
     
    void writeEMF(vector <Shape *> allshape, HDC filehdc)
    {
     
    }
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Вообще-то MOUSEMOVE это отслеживание движения мыши... Как Вы хотите через это рисовать? Вся программа которую Вы приводите занимается отслеживанием событий происходящих с мышью, ну на сколько я понимаю в "С", или Вы хотите менять размер с помощью мыши?
    Последний раз редактировалось Dimon012; 23.10.2012 в 08:45.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Рисование в PictureBox
    от Стас в разделе C/C++
    Ответов: 8
    Последнее сообщение: 05.10.2012, 16:20
  2. Утилита Redact v1.4 (Рисование примитивами, экспорт в код)
    от >Quiet Snow< в разделе Проекты на Basic
    Ответов: 9
    Последнее сообщение: 18.05.2012, 04:00
  3. Ответов: 1
    Последнее сообщение: 09.11.2011, 22:46
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •