Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 22:36   #1
koshkarjov
Пользователь
 
Аватар для koshkarjov
 
Регистрация: 31.01.2009
Сообщений: 26
Восклицание [C++] Работа с мышью

Доброго времени суток!

Помогите пожалуйста в написании программы:
При щелчке левой клавиши мыши внутри прямоугольника, дожно выводится сообщение:
"Вы попали в прямоугольник!". В любых других случаях щелчки на клавиши мыши должны выдавать сообщение
"Здравствуй мир!". Все сообщения выводить в левом верхнем углу окна.

Как это можно реализовать?

Пробовал так:
Код:
case WM_LBUTTONDOWN:
    xPos = 50;
    yPos = 50;
    TextOut(hDC,30,30,"Вы попали в прямоугольник!",lstrlen("Вы попали в прямоугольник!"));
    break;
Не получилось. Что я делаю не так?

Сама программа:
Код:
#include <windows.h>

LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);

void DrawMessageAndEllipse(HWND hwnd,int x,int y,char *msg);
char szWinName[] ="MyWin";

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode )
{

    HWND hwnd; 
    MSG msg; 
    WNDCLASSEX wcl;
    
    wcl.hInstance=hThisInst; 
    wcl.lpszClassName=szWinName;
    wcl.lpfnWndProc=WindowFunc;
    wcl.style=0; 
    wcl.cbSize = sizeof(WNDCLASSEX);              
    wcl.hIcon = LoadIcon(NULL,IDI_WINLOGO); 
    wcl.hIconSm = LoadIcon(NULL,IDI_WINLOGO);
    wcl.hCursor = LoadCursor(NULL,IDC_ARROW); 
    wcl.lpszMenuName = NULL; 
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0; 
    wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 
    if(!RegisterClassEx(&wcl)) return 0; 

    hwnd = CreateWindow ( 
        szWinName, 
        "Демонстрация рисования графических примитивов, работы с мышью и клавиатурой", 
        WS_CAPTION|WS_BORDER|WS_SYSMENU,
        CW_USEDEFAULT, 
        CW_USEDEFAULT,
        640, 
        480, 
        HWND_DESKTOP, 
        NULL, 
        hThisInst, 
        NULL 
    );

    ShowWindow(hwnd,nWinMode);
    UpdateWindow(hwnd);

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

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    
    HDC hDC; 
    int xPos,yPos;
    char buf[40];
    switch (message)
    {
    
    case WM_DESTROY: 
         PostQuitMessage(0);
         break;
    case WM_LBUTTONDOWN:
         xPos = LOWORD(lParam);
         yPos = HIWORD(lParam);
         wsprintf(buf,"Координаты X=%d Y=%d    ",xPos,yPos); 
         hDC=GetDC(hwnd);        
         TextOut(hDC,30,30,buf,lstrlen(buf));
         ReleaseDC(hwnd,hDC);
         break;

    case WM_PAINT:
         DrawMessageAndEllipse(hwnd,10,10,"Здравствуй мир!");
         break;
    default:
         return DefWindowProc(hwnd, message,wParam,lParam);
    
    case WM_KEYDOWN:
         switch (wParam)
           {
             case VK_ESCAPE:
                  exit(0);
                  break;
           }
    }
    return 0;
}

void DrawMessageAndEllipse(HWND hwnd,int x,int y,char *msg)
{
    HDC hDC;
    PAINTSTRUCT paintStruct;
    RECT clientRect;

    HBRUSH br1;
    HBRUSH br2;

    COLORREF color1,color2,color3,color4,color5;
    HPEN pen1,pen2,pen3;

    color1=0x00990000; /* цвет - красный */
    color2=0x00000099; /* цвет - синий */
    color3=0x00009900; /* цвет - зеленый */
    color4=0x0000FFFF; /* цвет - желтый */
    color5=0x00000000; /* цвет - черный */

    br1=CreateSolidBrush(color1);
    br2=CreateSolidBrush(color4);

    pen1=CreatePen(PS_DASH,3,color2);
    pen2=CreatePen(PS_DASH,5,color3); 
    pen3=CreatePen(PS_DASH,2,color5);

    hDC = BeginPaint(hwnd, &paintStruct);
    if (hDC != NULL)
    {

    GetClientRect(hwnd, &clientRect);
    SelectObject(hDC,br1);
    SelectObject(hDC,pen1);
    Rectangle(hDC,50,50,150,100);
    
    SelectObject(hDC,br2);
    SelectObject(hDC,pen2);
    Ellipse(hDC,450,350,550,400);
    
    SetTextColor(hDC, RGB(255,0,0)); 
    TextOut(hDC,x,y,msg,lstrlen(msg));
    
    SelectObject(hDC, pen3);
    MoveToEx(hDC,270,280,NULL);
    LineTo(hDC,320,220); 
    LineTo(hDC,370,280); 
    LineTo(hDC,270,280); 
    
    DeleteObject(pen1);
    DeleteObject(br1);
    DeleteObject(br2);

    EndPaint(hwnd, &paintStruct);
    }
}
Заранее большое спасибо!
koshkarjov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с мышью! _Timon Помощь студентам 1 20.01.2009 23:29
Работа с мышью Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 28.05.2008 21:19