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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2010, 19:04   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Visual c++ (win32 api)Отловить клавиши

Собственно незнаю как это сделать на Visual c++
На Delphi заклепал бе проблем, но задали ещё в Си сделать
Подскажите какая функция...и если можно примерчик.
Отловить нажатие клавиш в окне программы.
чтоб при нажатии выдовалось сообщение с номером клавиши...
если надо могу скинуть эту функцию сделаную на delphi
Вот код
Код:
#include "stdafx.h"
#include "windows.h"
#include "windowsx.h"



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

int APIENTRY WinMain(
		HINSTANCE hInstance,
		HINSTANCE hPrevInstance,
		LPSTR lpCmdLine,
		int nCmdShow)
{

	HWND hwnd;
	MSG msg;
	WNDCLASS w;
		memset(&w,0,sizeof(WNDCLASS));
	w.style = CS_HREDRAW | CS_VREDRAW;
	w.lpfnWndProc = WndProc;
	w.hInstance = hInstance;
	w.hbrBackground = GetStockBrush(WHITE_BRUSH);
	w.lpszClassName = "C Windows";
	RegisterClass(&w);
	hwnd = CreateWindow("C Windows","C Windows", WS_OVERLAPPEDWINDOW,
		10,10,600,480,NULL,NULL,hInstance,NULL);
	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
	if (Message == WM_DESTROY )
	{
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd,Message,wparam,lparam);
}
revaldo666 вне форума Ответить с цитированием
Старый 06.07.2010, 19:12   #2
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Код:
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
	if (Message == WM_DESTROY )
	{
		PostQuitMessage(0);
		return 0;
	} else if (Message == WM_CHAR){
		char buf[10];
		sprintf(buf, "%d", wparam);
		MessageBox(hwnd, buf, "Info", MB_OK | MB_ICONINFORMATION);
	}
	return DefWindowProc(hwnd,Message,wparam,lparam);
}
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 06.07.2010, 19:21   #3
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

спасибо...
но помойму он значения неправельные выдаёт
при нажатии клавиши А выдаёт 97
а как я помню должно 65...
или нет?))
revaldo666 вне форума Ответить с цитированием
Старый 06.07.2010, 19:22   #4
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Дак всё просто же))
Проверяем здесь же

Код:
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
	if (Message == WM_DESTROY )
	{
		PostQuitMessage(0);
		return 0;
	} else if(Message == WM_CHAR){
		char buf[2];
		buf[0] = wparam; buf[1] = 0;
		MessageBox(hwnd, buf, "Info", MB_OK | MB_ICONINFORMATION);
	}
	return DefWindowProc(hwnd,Message,wparam,lparam);
}
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 06.07.2010, 19:28   #5
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

о...спасибо так даже лучше...))
Терь буду разбиратсо что тута написано))
заодно на отлов мышки не подскажеш? (левая, правая кнопка)
Если не напрягает конечно
revaldo666 вне форума Ответить с цитированием
Старый 06.07.2010, 19:32   #6
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Не за что
Там другое сообщение обработать нужно. Щас вспомню, отпишусь)
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 06.07.2010, 19:40   #7
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Вот так.

Код:
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
	if (Message == WM_DESTROY )
	{
		PostQuitMessage(0);
		return 0;

	} else if (Message == WM_LBUTTONDOWN)
	{
		MessageBox(hwnd, "Left button", "Test", MB_OK);

	} else if (Message == WM_RBUTTONDOWN)
	{
		MessageBox(hwnd, "Right button", "Test", MB_OK);
	}

	return DefWindowProc(hwnd,Message,wparam,lparam);
}
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 06.07.2010 в 19:44.
wyvern вне форума Ответить с цитированием
Старый 06.07.2010, 19:50   #8
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

спасибо.
Практически тоже самое что и на Delphi
revaldo666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить событие нажатия клавиши Esc? dsapa Microsoft Office Excel 14 03.12.2016 14:27
Visual c++ (win32 api) выдаёт ошибку revaldo666 Visual C++ 5 07.07.2010 10:10
Visual c++ (win32 api) выдаёт ошибку revaldo666 Visual C++ 3 06.07.2010 18:58
Delphi win32 api отловить нажатие кнопок revaldo666 Win Api 2 06.07.2010 01:14
отловить нажатие клавиши в ячейке (до нажатия enter) loginrl103 Microsoft Office Excel 3 07.08.2009 15:10