Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу Обработка сообщений мыши
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
annka_1 annka_1 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2011
По умолчанию Обработка сообщений мыши - 27.12.2011, 16:04

Имеется код, который создаёт окно, а при нажатии клавиши (левой либо правой) выводиться сообщение.
Мне нужно заменить это сообщение на координаты.
cpp Код:
// Обработка сообщений нажатия на кнопку мыши
#include "windows.h"
#include <tchar.h>
#include <stdio.h>
LRESULT CALLBACK WndProc (HWND, UINT,WPARAM, LPARAM);
TCHAR WinName[] = _T("MainFrame");
int APIENTRY _tWinMain(HINSTANCE This,  // Дескриптор текущего приложения
                       HINSTANCE Prev,  // В современных системах всегда 0
                       LPTSTR cmd,      // Командная строка
                       int mode)        // Режим отображения окна
{
    HWND hWnd;      // Дескриптор главного окна программы
    MSG msg;        // Структура для хранения сообщений
    WNDCLASS wc;    // Класс окна
// Определение класса окна
    wc.hInstance = This;
    wc.lpszClassName = WinName;                 // Имя класса окна
    wc.lpfnWndProc = WndProc;                   // Функция окна
    wc.style = CS_HREDRAW | CS_VREDRAW;         // Стиль окна
    wc.hIcon = LoadIcon(NULL, IDI_EXCLAMATION); // Стандартная иконка
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);   // Стандартный курсор
    wc.lpszMenuName = NULL;                     // Нет меню
    wc.cbClsExtra = 0;                          // Нет дополнительных данных класса
    wc.cbWndExtra = 0;                          // Нет дополнительные данных окна
    // Заполнение окна белым цветом
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    if(!RegisterClass(&wc)) // Регситрация класса окна
        return 0;
// Создание окна
    hWnd = CreateWindow(WinName,            // Имя класса окна
            _T("Каркас Windows-приложения"),// Заголовок окна
            WS_OVERLAPPEDWINDOW,            // Стиль окна
            CW_USEDEFAULT,                  // x
            CW_USEDEFAULT,                  // y Размеры окна
            CW_USEDEFAULT,                  // width
            CW_USEDEFAULT,                  // height
            HWND_DESKTOP,                   // Дескриптор родительского окна
            NULL,                           // Дескриптор меню
            This,                           // Дескриптор приложения
            NULL);                          // Доп. информации нет
    ShowWindow(hWnd, mode);                 // Показать окно
// Цикл обработки сообщений
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);     // Функция трансляции кодов нажатой клавиши
        DispatchMessage(&msg);      // Посылает сообщения функции WndProc()
    }
    return 0;
   
}

TCHAR *r_str = _T("Нажата правая кнопка мыши");
TCHAR *l_str = _T("Нажата левая кнопка мыши");

// Оконная функция вызывается операционной системой
// и получает сообщения из очереди для данного приложения
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    int x,y;
    char S[10];
// Обработчик сообщений
    switch(message)
    {
    case WM_RBUTTONDOWN:
        x = LOWORD(lParam);
        y = HIWORD(lParam);
        hdc = GetDC(hWnd);
//      if(MK_SHIFT & wParam)
        if(MK_CONTROL & wParam)
        sprintf(S, "(%d,%d)", x, y);
        hdc = GetDC(hWnd);
        TextOut(hdc, x, y, S, strlen(S));
//      if(MK_SHIFT | MK_CONTROL | MK_LBUTTON == wParam)
        //TextOut(hdc, x, y, r_str, _tcsclen(r_str));
        ReleaseDC(hWnd, hdc);
        break;
    case WM_LBUTTONDOWN:
        x = LOWORD(lParam);
        y = HIWORD(lParam);
        hdc = GetDC(hWnd);
        if(MK_CONTROL & wParam)
        TextOut(hdc, x, y, l_str, _tcsclen(l_str));
        ReleaseDC(hWnd, hdc);
        break;
    case WM_RBUTTONUP:
    case WM_LBUTTONUP:
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break; // Завершение программы
    default:
        return DefWindowProc(hWnd, message,wParam,lParam);
    }
    return 0;
}
Ответить с цитированием
  (#2 (permalink)) Старый
annka_1 annka_1 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2011
По умолчанию 27.12.2011, 16:13

хммм...вот что то получилось..но вместо координат выводит иероглифы...в чём проблема!?
cpp Код:
...
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    int x,y;
    char S[10];
// Обработчик сообщений
    switch(message)
    {
    case WM_LBUTTONDOWN:
        x = LOWORD(lParam);
        y = HIWORD(lParam);
        hdc = GetDC(hWnd);
        if(MK_CONTROL & wParam)
        sprintf(S, "(%d,%d)", x, y);
        TextOut(hdc, x, y, (LPCWSTR)S, strlen(S));
        //TextOut(hdc, x, y, l_str, _tcsclen(l_str));
        ReleaseDC(hWnd, hdc);
        break;
    case WM_RBUTTONUP:
    case WM_LBUTTONUP:
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break; // Завершение программы
    default:
        return DefWindowProc(hWnd, message,wParam,lParam);
    }
    return 0;
}
Ответить с цитированием
  (#3 (permalink)) Старый
annka_1 annka_1 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2011
По умолчанию 27.12.2011, 17:07

Спасибо всем за "помощь".
Нашла ответ...
вместо TextOut() нужно использовать TextOutA()
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Squeak. Обработка сообщений мыши imported_NIK_ Smalltalk 0 27.12.2009 13:57
Обработка сообщений Windows в C++ Builder BreakPointMAN C++ Builder 9 04.04.2006 02:20
Обработка сообщений Windows средствами C++ Builder BreakPointMAN C++ Builder 22 18.03.2006 01:52
Обработка сообщений в приложении MiDmax C++ Builder 6 26.01.2006 17:30
Обработка сообщений Windows в пользовательском классе zhekha Visual C++ 7 10.11.2005 09:23
Обработка сообщений от динамических объектов Omen Visual C++ 1 03.05.2005 13:09
Обработка сообщений в С++ FOBOSX Visual C++ 1 02.05.2005 22:57
Обработка сообщений MFC blur Visual C++ 4 10.04.2005 13:31
Обработка сообщений MCI Mixer killproblem C++ Builder 0 09.03.2005 03:44
Обработка сообщений в цикле вова123 Visual C++ 3 07.10.2004 16:10
Обработка сообщений dialogа где должна быть Northwood WinAPI 2 15.07.2004 11:26
Получение и обработка сообщений с почтового сервера evss Delphi 5 07.02.2004 20:52



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов