Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.94
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
#1

Указатель this - C++

18.04.2011, 08:27. Просмотров 4392. Ответов 26
Метки нет (Все метки)

как в windows Forms //
горячую клавишу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2011, 08:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель this (C++):

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...

Указатель на функцию - C++
Доброго времени суток! Кто может посоветовать способ присвоить указателю на функцию значение, т.е. имя функции, если мы не будем...

Меняется указатель? - C++
Привет всем. Поставил себе задачу, вытащить из одной игры данные (здоровье, деньги, уровень), и отображать их параллельно в программе, с...

Указатель на метод - C++
struct abc{ int a; int b; int c; abc(int na = 0, int nb = 0, int nc = 0):a(na),b(nb),c(nc){}; bool conf(int d){ ...

friend указатель - C++
Есть ли что-то типа этого в стандарте: class A { protected: double a; public: typedef double (*td) (double x); td a; ...

Указатель на пользовательский тип - C++
Чёто туплю, почему когда передаёшь переменную (например int) параметром через адрес в функцию (параметр - указатель на этот тип), то в теле...

26
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2011, 08:02 #2
При чём здесь формы, тем более кнопки? this - это неявный указатель в методах и операторах-членах.
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A ()
 {
  a=0;
 }
};
эквивалентно
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A ()
 {
  this->a=0;
 }
};
, причём, как не пиши, а получится всё равно только
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A ()
 {
  this->a=0;
 }
};
. Нужно для обращения к члену, перекрытому параметром:
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A (int a)
 {
  this->a=a; // this->a - член, a - параметр.
 }
};
и для возврата ссылки на this:
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
 ...
 public:
 ...
  A operator = (A& x)
  {
   ...
   return *this;
  }
}
.
1
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
19.04.2011, 08:05  [ТС] #3
Цитата Сообщение от taras atavin Посмотреть сообщение
При чём здесь формы, тем более кнопки? this - это неявный указатель в методах и операторах-членах.
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A ()
 {
  a=0;
 }
};
эквивалентно
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A ()
 {
  this->a=0;
 }
};
, причём, как не пиши, а получится всё равно только
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A ()
 {
  this->a=0;
 }
};
. Нужно для обращения к члену, перекрытому параметром:
C++
1
2
3
4
5
6
7
8
9
class A
{
 public:
 int a;
 A (int a)
 {
  this->a=a; // this->a - член, a - параметр.
 }
};
и для возврата ссылки на this:
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
 ...
 public:
 ...
  A operator = (A& x)
  {
   ...
   return *this;
  }
}
.

например нажал на "*" и вызывалась функция кнопки умножения
как так сделать?
Windows Forms c++
1
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2011, 08:22 #4
Цитата Сообщение от sektor2009 Посмотреть сообщение
например нажал на "*" и вызывалась функция кнопки умножения
И какое это имеет отношение к указателю this?
0
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
19.04.2011, 08:23  [ТС] #5
Цитата Сообщение от taras atavin Посмотреть сообщение
И какое это имеет отношение к указателю this?
В нете читал что через него делается
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2011, 08:26 #6
Цитата Сообщение от sektor2009 Посмотреть сообщение
В нете читал что через него делается
А сломанный БЕЛАЗ ремонтируется методом поездки на нём в Москву? Для того, чтоб подняться на лифте на 12-й этаж, надо отвинтить колесо у такси?
0
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
19.04.2011, 08:36  [ТС] #7
Цитата Сообщение от taras atavin Посмотреть сообщение
А сломанный БЕЛАЗ ремонтируется методом поездки на нём в Москву? Для того, чтоб подняться на лифте на 12-й этаж, надо отвинтить колесо у такси?
это на делфи
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) andin ['A', 'a']) then
ShowMessage('Ctrl-A');
end;
как на с++ ?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Для примера, перехватим комбинацию ALT + CONTROL + ENTER.
 
Сначала регистрируем горячую клавишу:
 
bool RHKret = RegisterHotKey(Form1->Handle,         // Handle окна, которому отправлять сообщения WM_HOTKEY
                             0x00F,                 // УСЛОВНЫЙ идентификатор горячего ключа
                             MOD_ALT + MOD_CONTROL, // модификаторы
                             VK_RETURN              // код клавиши
                             );
if (RHKret) // если всё о'кей
        {
        ShowMessage("Hot Key Registred");
        }
 
 
Затем размещаем на Form1 TApplicationEvents и в OnMessage пишем:
 
if (Msg.message == WM_HOTKEY) // сообщение наше
        {
        if (Msg.wParam == 0x00F) // идентификатор наш
                {
                ShowMessage("www.sources.ru"); // громко кричим "уря"
                }
        }
 
 
Когда горячая клавиша больше не нужна, отключаем ее:
 
UnregisterHotKey(Form1->Handle, // Handle окна
                 0x00F          // наш идентификатор горячего ключа
                 );

C++ Builder это!

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
И какое это имеет отношение к указателю this?
вот
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public Form1()
        {
            InitializeComponent();
            this.KeyPreview = true;
        }
 
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.KeyCode == Keys.F1) 
            {
                MessageBox.Show("Тест");
                e.Handled = true;
            }
        }
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
19.04.2011, 08:42 #8
sektor2009,
this.KeyPreview = true; из этого примера можно убрать наверное даже, и суть от этого не поменяется.
0
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
19.04.2011, 08:43  [ТС] #9
Цитата Сообщение от vitaly1981 Посмотреть сообщение
sektor2009,
this.KeyPreview = true; из этого примера можно убрать наверное даже, и суть от этого не поменяется.
это же конструктор
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
19.04.2011, 08:47 #10
Я так вижу, что ты саму задачу свою толком не понимаешь, выставляй описание самой задачи, тогда кто нить да поможет, а так это все пустая болтовня.

Добавлено через 1 минуту
sektor2009, И что с того что конструктор? this к перехвату нажатия клавиши вообще не имеет тут отношения.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2011, 08:48 #11
Цитата Сообщение от sektor2009 Посмотреть сообщение
вот
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public Form1()
        {
            InitializeComponent();
            this.KeyPreview = true;
        }
 
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.KeyCode == Keys.F1) 
            {
                MessageBox.Show("Тест");
                e.Handled = true;
            }
        }
Здесь он не нужен. И потом, решётка обсуждается в другом разделе.
0
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
19.04.2011, 08:49  [ТС] #12
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Я так вижу, что ты саму задачу свою толком не понимаешь, выставляй описание самой задачи, тогда кто нить да поможет, а так это все пустая болтовня.

Добавлено через 1 минуту
sektor2009, И что с того что конструктор? this к перехвату нажатия клавиши вообще не имеет тут отношения.
У меня кнопка - Button, выполняет такое то действие, не подскажите, как привязать выполнение действия этой кнопки на нажатие кнопки Enter?
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2011, 08:52 #13
Цитата Сообщение от sektor2009 Посмотреть сообщение
У меня кнопка - Button, выполняет такое то действие, не подскажите, как привязать выполнение действия этой кнопки на нажатие кнопки Enter?
Обработкой кнопок клавы в событии OnKeyDown. this применяется для других целей.
0
sektor2009
3 / 3 / 0
Регистрация: 15.03.2009
Сообщений: 347
19.04.2011, 08:53  [ТС] #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Обработкой кнопок клавы в событии OnKeyDown. this применяется для других целей.
меня интерисует как все это сделать
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2011, 08:54 #15
Кстати, перехваты и горячие кнопки вообще не имеют никакого отношения к чистым сям. Это системно-зависимые аспекты и тему надо рамещать соотвественно в сях для винды, или в сях для линя. Но ни как не в общем разделе. Или хотябы явно назови ось.
0
19.04.2011, 08:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2011, 08:54
Привет! Вот еще темы с ответами:

Указатель на метод класса. - C++
Программа отказывается присваивать метод класса указателю. Как исправить? test.cpp: In function ‘int main()’: test.cpp:66: error:...

Умный указатель ComPtr - C++
Равноценна ли запись с простым указателем #include <d3d11_1.h> ID3D11Device *device_11_0 = nullptr; ID3D11Device1 *device_11_1 =...

Указатель на абстрактный шаблонный класс - C++
Есть абстрактный шаблон класса и 3 производных от него шаблонов классов. Так же есть шаблонная функция, в которую нужно передать указатель...

Как предать указатель через LPARAM - C++
Хочу обойтись без глобальных объектов в приложении на Win32Api, в приложении из GUI только два диалога (за основное окно отдувается один из...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru