Форум программистов, компьютерный форум CyberForum.ru

Как нарисовать точку на экране поверх всех окон? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.76
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
24.04.2012, 12:10     Как нарисовать точку на экране поверх всех окон? #1
Нужно вывести по центру экрана точку поверх всех окон, тоесть не только в моём приложении а вообще поверх всех.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.04.2012, 12:14     Как нарисовать точку на экране поверх всех окон? #2
Windows? получить device content (DC) главного окна и поставить на нем точку.
MaxxximyM
18 / 2 / 1
Регистрация: 31.08.2011
Сообщений: 132
24.04.2012, 12:31  [ТС]     Как нарисовать точку на экране поверх всех окон? #3
Да Windows, использую Visual Studio 2010.Пока получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <Windows.h>
#include <WinGDI.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{   
 
    HDC hdc;
    hdc=GetDC(GetDesktopWindow());
    SetPixel(hdc, 500, 500, RGB(255, 255, 255));
    Sleep(10000);
}
Добавлено через 2 минуты
Разобрался, оказывается этот код и рисует поверх окон точку.
-=ЮрА=-
Заблокирован
Автор FAQ
24.04.2012, 13:34     Как нарисовать точку на экране поверх всех окон? #4
Цитата Сообщение от MaxxximyM Посмотреть сообщение
Разобрался, оказывается этот код и рисует поверх окон точку.
- по секрету скажу что код ниже кроме красной точки рисует ещё и белый прямоугольник 70х160
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
 
int main()
{
    HDC hDC = GetDC(NULL);
    if(!hDC)
        MessageBox(NULL,"Error retriving graphical context",NULL,MB_OK);
    else
    {
        SetPixel(hDC,20,30,RGB(255,0,0));
        Rectangle(hDC,30,40,100,200);
    }
    system("pause");
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
HDC hDC = GetDC(NULL);
- получение графического контекста окна NULL означает что нас интересует рабочий стол, если бы вписал вместо NULL GetForegroundWindow() то отрисовка произошла бы в текущем активном окне системы. Далее по коду думаю всё понятно
Leax
174 / 173 / 4
Регистрация: 07.11.2010
Сообщений: 477
27.05.2012, 16:00     Как нарисовать точку на экране поверх всех окон? #5
Только что установил VS2008 Express (C++ ), при вставке вышеуказанного кода в консольный проект выдает:
1>------ Построение начато: проект: Test1, Конфигурация: Debug Win32 ------
1>Компиляция...
1>Test1.cpp
1>.\Test1.cpp(1) : warning C4627: #include <windows.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>.\Test1.cpp(16) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Журнал построения был сохранен в "file://c:\Users\Alex\Documents\Visual Studio 2008\Projects\Test1\Test1\Debug\BuildLog.htm"
1>Test1 - ошибок 1, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
При вставке директивы #include "stdafx.h" второй строкой - ошибок вываливается ещё больше.
Подскажите, пожалуйста, где исправить, если не долго

З.Ы.: раньше с C++ не работал, только с C# ...
IceSqueez
Java, C# - Expert
 Аватар для IceSqueez
66 / 66 / 2
Регистрация: 09.08.2011
Сообщений: 284
27.05.2012, 16:13     Как нарисовать точку на экране поверх всех окон? #6
Вот попробуй это, у меня все работает идеально.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// thread557087.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <windows.h>
 
int main()
{
    HDC hDC = GetDC(NULL);
    if(!hDC)
        MessageBox(NULL,(LPCWSTR)"Error retriving graphical context",NULL,MB_OK);
    else
    {
        SetPixel(hDC,20,30,RGB(255,0,0));
        Rectangle(hDC,30,40,100,200);
    }
    system("pause");
    return 0;
}
Leax
174 / 173 / 4
Регистрация: 07.11.2010
Сообщений: 477
27.05.2012, 16:16     Как нарисовать точку на экране поверх всех окон? #7
Странно... так еще хуже (
1>------ Построение начато: проект: Test1, Конфигурация: Debug Win32 ------
1>Компиляция...
1>Test1.cpp
1>Компоновка...
1>Test1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000015) "extern "C" int __stdcall Rectangle(struct HDC__ *,int,int,int,int)" (?Rectangle@@$$J220YGHPAUHDC__@@HHHH@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000016) "extern "C" unsigned long __stdcall SetPixel(struct HDC__ *,int,int,unsigned long)" (?SetPixel@@$$J216YGKPAUHDC__@@HHK@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000017) "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test1.obj : error LNK2028: ссылка на неразрешенную лексему (0A00001E) "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) в функции "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z)
1>Test1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) в функции "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z)
1>Test1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall Rectangle(struct HDC__ *,int,int,int,int)" (?Rectangle@@$$J220YGHPAUHDC__@@HHHH@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned long __stdcall SetPixel(struct HDC__ *,int,int,unsigned long)" (?SetPixel@@$$J216YGKPAUHDC__@@HHK@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>C:\Users\Alex\Documents\Visual Studio 2008\Projects\Test1\Debug\Test1.exe : fatal error LNK1120: 8 неразрешенных внешних элементов
1>Журнал построения был сохранен в "file://c:\Users\Alex\Documents\Visual Studio 2008\Projects\Test1\Test1\Debug\BuildLog.htm"
1>Test1 - ошибок 9, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
IceSqueez
Java, C# - Expert
 Аватар для IceSqueez
66 / 66 / 2
Регистрация: 09.08.2011
Сообщений: 284
27.05.2012, 16:20     Как нарисовать точку на экране поверх всех окон? #8
Ты создал обычный консольный проект и вылетают такие ошибки ??

П.С. у меня вылетало что-то подобное когда я создав консольный проект но брал в неё dll library - то есть роботу с библиотеками.
Leax
174 / 173 / 4
Регистрация: 07.11.2010
Сообщений: 477
27.05.2012, 16:28     Как нарисовать точку на экране поверх всех окон? #9
Цитата Сообщение от IceSqueez Посмотреть сообщение
Ты создал обычный консольный проект и вылетают такие ошибки ??

П.С. у меня вылетало что-то подобное когда я создав консольный проект но брал в неё dll library - то есть роботу с библиотеками.
Я создал консольное приложение CLR и заменил появившийся код вашим кодом.
Может в настройках нужно еще что-то подкручивать?
IceSqueez
Java, C# - Expert
 Аватар для IceSqueez
66 / 66 / 2
Регистрация: 09.08.2011
Сообщений: 284
27.05.2012, 16:31     Как нарисовать точку на экране поверх всех окон? #10
В этом то и проблема, данный код написан не для CLR проектов, а обычный Windows Console Application. CLR работает по другому.

П.С. Кстати он более похож на C# Хотя и С++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2012, 16:40     Как нарисовать точку на экране поверх всех окон?
Еще ссылки по теме:

Звук поверх всех остальных C++
C++ В введенной строке заменить каждую запятую и точку на точку с запятой
Нарисовать часть окружности зная диаметр, стартовую точку, стартовый и конечный углы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Leax
174 / 173 / 4
Регистрация: 07.11.2010
Сообщений: 477
27.05.2012, 16:40     Как нарисовать точку на экране поверх всех окон? #11
Цитата Сообщение от IceSqueez Посмотреть сообщение
В этом то и проблема, данный код написан не для CLR проектов, а обычный Windows Console Application. CLR работает по другому.

П.С. Кстати он более похож на C# Хотя и С++
Точно, спасибо! ваш код работает
Yandex
Объявления
27.05.2012, 16:40     Как нарисовать точку на экране поверх всех окон?
Ответ Создать тему
Опции темы

Текущее время: 13:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru