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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Вызов обратной функции в классе - C++

23.11.2013, 22:33. Просмотров 452. Ответов 15
Метки нет (Все метки)

main.cpp

C++
// main.cpp
#include "func.h"
 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    CREATEWIN();
 
    bool bq = false;
    MSG msg;
 
    while (!bq)
    {
        if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
            if(msg.message == WM_QUIT) { 
                bq = true; 
            }
            else { 
                TranslateMessage(&msg); 
                DispatchMessage(&msg); 
            }
        }
        else
        {
            if(GetAsyncKeyState(VK_ESCAPE)) PostQuitMessage(0); // Esc - выход
            Sleep(1);
        }
    }
}
func.h

C++
// func.h
#ifndef FUNC_H
#define FUNC_H
 
#include <windows.h>
 
class PROGRAM
{
public:
    HINSTANCE    hInst;
    HWND         hWnd;
    HDC          hDC;
 
    LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
    void CREATEWIN();
};
 
#endif // FUNC_H


C++
#include "func.h"
 
LRESULT CALLBACK PROGRAM::WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if(msg == WM_CLOSE)
    {
        PostQuitMessage(0);
        return false;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
 
void PROGRAM::CREATEWIN()
{
    WNDCLASSEX wcx;
    hInst = (HINSTANCE)GetModuleHandle(0);
    memset(&wcx, 0, sizeof(wcx));
    wcx.cbSize        = sizeof(wcx);
    wcx.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wcx.lpfnWndProc   = (WNDPROC)WinProc; /* ЗДЕСЬ ПИШЕТ ОШИБКУ О НЕПРАВИЛЬНОМ ИСПОЛЬЗОВАНИИ ФУНКЦИИ */
    wcx.hInstance     = hInst;
    wcx.lpszClassName = "app";
    wcx.hIcon         = LoadIcon(0, IDI_APPLICATION);
    wcx.hCursor       = LoadCursor(0, IDC_ARROW);
    RegisterClassEx(&wcx);
    hWnd = CreateWindowEx(WS_EX_APPWINDOW, "app", " ", WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, 0, 0, hInst, 0);
    ShowWindow(hWnd, SW_SHOW);
    SetForegroundWindow(hWnd);
    SetFocus(hWnd);
    UpdateWindow(hWnd);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2013, 22:33     Вызов обратной функции в классе
Посмотрите здесь:

Вызов функции в классе - C++
Ребята помогите пожалуйста. Пишу консольную игрушку типо гоночек. При нажатии на кнопку &quot;W&quot; вызывается фукнция повышения скорости, но по...

Вызов метода в классе из другого - C++
Не получается выполнить следующую цепочку действий. Запускаю метод в классе B через main, он запускает метод в классе A который должен...

Вызов оператора= в производном классе - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;numeric&gt; using namespace std; template &lt;class T&gt; class Vector: public...

В производном классе вызов приватного метода базового класса - C++
Добрый вечер. Помогите понять одну вещь. Имеется такое наследование: class test1 { public: void pubF() { ...

С++ - map с указателями на функции и функции в классе - C++
Сразу скажу, не уверен, что это возможно осуществить моим способом и прошу указать мою ошибку или показать другое решение близкое к моему.....

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
23.11.2013, 22:46     Вызов обратной функции в классе #2
C++ (Qt)
1
static LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
23.11.2013, 23:26  [ТС]     Вызов обратной функции в классе #3
Здесь пишут о том, что нужно создавать второй метод: http://cboard.cprogramming.com/windo...tml#post297131
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.11.2013, 00:34     Вызов обратной функции в классе #4
1. не надо делать WinMain членом класса, даже статическим, потому что это костыльно
2. не надо делать WinMain точкой входа, потому что это не переносимо. точку входа как main можно задать линковщику при сборке.
3. не надо юзать UPPER_CASE для названий классов и методов, потому что это не отличимо от WinAPI-шниых названий.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.11.2013, 01:13  [ТС]     Вызов обратной функции в классе #5
Цитата Сообщение от Jupiter Посмотреть сообщение
не надо делать WinMain точкой входа, потому что это не переносимо
делать main() ?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.11.2013, 02:36     Вызов обратной функции в классе #6
Цитата Сообщение от programina Посмотреть сообщение
делать main() ?
да.
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
24.11.2013, 04:00     Вызов обратной функции в классе #7
нужно полностью определить метод
C++
1
wcx.lpfnWndProc   = (WNDPROC)PROGRAM::WinProc;
п.с О какой переносимости winapi идет речь?)
Max Dark
шКодер самоучка
1784 / 1585 / 576
Регистрация: 09.10.2013
Сообщений: 3,546
Записей в блоге: 6
Завершенные тесты: 2
24.11.2013, 05:20     Вызов обратной функции в классе #8
Вот нарыл у себя, может пригодится...
Вложения
Тип файла: 7z links.7z (4.3 Кб, 4 просмотров)
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.11.2013, 10:04  [ТС]     Вызов обратной функции в классе #9
Цитата Сообщение от Jupiter Посмотреть сообщение
да.
Не понимаю. Точка входа вин32-приложений должна быть винмайн. Ну ладно. Под виндой еще посмотрю откуда у винмайна ноги растут.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
24.11.2013, 10:25     Вызов обратной функции в классе #10
Цитата Сообщение от Jupiter Посмотреть сообщение
не надо делать WinMain точкой входа, потому что это не переносимо. точку входа как main можно задать линковщику при сборке.
Учитывая, что вся программа состоит в основном из использования WinAPI, я бы не беспокоился о переносимости.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.11.2013, 15:03     Вызов обратной функции в классе #11
Цитата Сообщение от programina Посмотреть сообщение
Точка входа вин32-приложений должна быть винмайн.
точкой входа можно сделать любую функцию

Цитата Сообщение от Nick Alte Посмотреть сообщение
Учитывая, что вся программа состоит в основном из использования WinAPI, я бы не беспокоился о переносимости.
Цитата Сообщение от stima Посмотреть сообщение
п.с О какой переносимости winapi идет речь?)
сразу пишем PIMPL
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
24.11.2013, 15:55     Вызов обратной функции в классе #12
piml это хорошо, но возможно kiss?
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.11.2013, 00:14  [ТС]     Вызов обратной функции в классе #13
Пимплы, киссы У меня другая проблема, убрала весь ООП с классами, а все функции разместила в 7 cpp файлах, обьявления всех функций, переменных, констант, а также инклуды хедеров лежат в одном h файле. Теперь очень долго компилируется, около 10 сек.
Под компилированием я имею ввиду полную сборку проекта.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
25.11.2013, 00:19     Вызов обратной функции в классе #14
Может быть несколько причин:
1)Слабое железо
2)Добавляли ли #define HEADER_H__? в заголовочных файлах?..
3)Различные ошибки с ос..
а вообще да, есть такое чем больше файлов тем больше время тратит сборщик на анализ и т.д так что привыкайте..
ct0r
Игогошка!
1768 / 670 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
25.11.2013, 00:43     Вызов обратной функции в классе #15
Цитата Сообщение от programina Посмотреть сообщение
убрала весь ООП с классами, а все функции разместила в 7 cpp файлах, обьявления всех функций, переменных, констант, а также инклуды хедеров лежат в одном h файле.
Зачем? Это вообще не круто. pimpl, forward declarations, decoupling - вот это круто.

Цитата Сообщение от programina Посмотреть сообщение
Под компилированием я имею ввиду полную сборку проекта.
А смысл мерять полную сборку? Это разовое действие.

Цитата Сообщение от programina Посмотреть сообщение
Теперь очень долго компилируется, около 10 сек.
Тоже мне горе Если у меня компилируется 5 минут, я счастлив. Потому что потенциально может 1.5-2 часа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 07:48     Вызов обратной функции в классе
Еще ссылки по теме:

Не работают функции в классе - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;nasled.h&quot; using namespace std; int main() { setlocale(LC_ALL,...

Обращение к функции в классе - C++
Здравствуйте! Хочу обратится к функции print в классе Data. Помогите // 11.cpp: определяет точку входа для консольного приложения. ...

Рекурсивные функции в классе - C++
Я написал рабочий класс для работы с бинарным деревом поиска и в нём имеется много рекурсивных методов (по заданию). Из-за этого эти...

Внешние функции в классе - C++
del


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

Или воспользуйтесь поиском по форуму:
programina
25.11.2013, 07:48  [ТС]     Вызов обратной функции в классе
  #16

Не по теме:

Создам новую тему про extern.

Yandex
Объявления
25.11.2013, 07:48     Вызов обратной функции в классе
Ответ Создать тему
Опции темы

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