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

Помогите оптимизировать код - C++

Восстановить пароль Регистрация
 
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
05.05.2012, 23:01     Помогите оптимизировать код #1
Здравствуйте! Помогите, пожалуйста, оптимизировать его:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "main.h"
///============================================================================================================
/// Name: WinMain
/// Desc:
///============================================================================================================
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
    General general(500, 500);
    general.MyRegisterClass(hInst);
    general.InitInstance(hInst, nCmdShow);
              
    MSG messages = general.messages;
    while ( messages.message != WM_QUIT )
    {
        if( PeekMessage( &messages, NULL, 0, 0, PM_REMOVE ) )
        {
            TranslateMessage(&messages);
            DispatchMessage(&messages);
        }
    }
    return messages.wParam;
}
main.h
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <windows.h>
 
class General 
{
      public:
             General(int,int);
             static LRESULT CALLBACK WindowProcedure ( HWND, UINT, WPARAM, LPARAM );
             ATOM MyRegisterClass(HINSTANCE);
             BOOL InitInstance(HINSTANCE, int);
             MSG messages;
      private:
             int _iWidth;
             int _iHeight;
             HWND _hWnd;
              
             WNDCLASSEX _wcex;
              
};
///============================================================================================================
/// Name: General
/// Desc:
///============================================================================================================
General::General(int iWidth, int iHeight)
{
    General::_iWidth = iWidth;
    General::_iHeight = iHeight;
};
 
///============================================================================================================
/// Name: MyRegisterClass
/// Desc:
///============================================================================================================
ATOM General::MyRegisterClass(HINSTANCE hInst)
{
    WNDCLASSEX wcex = General::_wcex;
    wcex.hInstance          = hInst;
    wcex.lpszClassName      = "Class1";
    wcex.lpfnWndProc        = WindowProcedure;
    wcex.style              = CS_DBLCLKS;
    wcex.cbSize             = sizeof (WNDCLASSEX);
    wcex.hIcon              = LoadIcon (NULL, IDI_APPLICATION);
    wcex.hIconSm            = LoadIcon (NULL, IDI_APPLICATION);
    wcex.hCursor            = LoadCursor (NULL, IDC_ARROW);
    wcex.lpszMenuName       = NULL;
    wcex.cbClsExtra         = 0;
    wcex.cbWndExtra         = 0;
    wcex.hbrBackground      = (HBRUSH)GetStockObject(BLACK_BRUSH);
 
    return RegisterClassEx(&wcex);
}
///============================================================================================================
/// Name: InitInstance
/// Desc:
///============================================================================================================
BOOL General::InitInstance(HINSTANCE hInst, int nCmdShow)
{
    HWND hWnd = General::_hWnd;
    hWnd = CreateWindowEx ( 0, "Class1", "Application", WS_POPUP, 0, 0, General::_iWidth, General::_iHeight, HWND_DESKTOP, 0, hInst, 0 );
    ShowCursor(FALSE);
    ShowWindow (hWnd, nCmdShow);
    SetFocus(hWnd);
    UpdateWindow (hWnd);
    SetForegroundWindow(hWnd);
    return TRUE;
}
///============================================================================================================
/// Name: WindowProcedure
/// Desc:
///============================================================================================================
LRESULT CALLBACK General::WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
           case WM_CLOSE:
           {
                              
           }
           break;
        case WM_KEYDOWN:
            switch( wParam )
            {
                case VK_ESCAPE:
                    PostQuitMessage(0);
                    break;
            }
            break;
 
        default:
            return DefWindowProc (hWnd, message, wParam, lParam);
            break;
    }
    return 0;
}
Меня, например, очень смущает типа такие записи HWND hWnd = General::_hWnd;
По идее их через указатель надо делать, но я пробывал у меня не получилось.
Заранее благодарен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
05.05.2012, 23:05     Помогите оптимизировать код #2
Цитата Сообщение от Helldrg Посмотреть сообщение
Меня, например, очень смущает типа такие записи HWND hWnd = General::_hWnd;
Чем они вас смущают? Это обычное сокращение. Можно вообще тупо писать вместо hWnd General::_hWnd и будет тоже самое.
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
05.05.2012, 23:09  [ТС]     Помогите оптимизировать код #3
А почему через указатель не работает? Так же по идее правильно будет))
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
05.05.2012, 23:10     Помогите оптимизировать код #4
Helldrg, например?
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
05.05.2012, 23:13  [ТС]     Помогите оптимизировать код #5
типа HWND *hWnd = &General::_hWnd; ведь _hWnd сразу создается после создания объекта general? тогда так и должно быть))))
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
05.05.2012, 23:17     Помогите оптимизировать код #6
Helldrg, интересно, только не понятно для чего здесь нужен указатель
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
05.05.2012, 23:20  [ТС]     Помогите оптимизировать код #7
ну я так понимаю, что указатель HWND *hWnd меньше весит переменной HWND hWnd
И вообще я не эксперт в ООП, а только учусь)) так что строго не суди)
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
05.05.2012, 23:26     Помогите оптимизировать код #8
Helldrg, указатель весит ровно столько, сколько весит HWND.
Можно вообще сделать без затрат. Напишите так:
C++
1
HWND &hWnd = General::_hWnd;
Тогда не будет никаких затрат на память и на производительность.
Только стоит ли игра свеч из-за нескольких байт?
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
05.05.2012, 23:30  [ТС]     Помогите оптимизировать код #9
в данной ситуации конечно же нет! Но бывают случаи когда не в несколько байт, а больше разница будет
HWND &hWnd = General::_hWnd;
А это типа ссылки получается что ли?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
05.05.2012, 23:32     Помогите оптимизировать код #10
Helldrg, для конкретной ситуации конкретный код. В этот случае код вполне правильный.
Цитата Сообщение от Helldrg Посмотреть сообщение
типа ссылки получается что ли
Да, ссылка. Просто псевдоним переменной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2012, 23:37     Помогите оптимизировать код
Еще ссылки по теме:

C++ Нужно оптимизировать код
C++ Оптимизировать код
C++ Оптимизировать и минимализировать код

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

Или воспользуйтесь поиском по форуму:
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,076
05.05.2012, 23:37  [ТС]     Помогите оптимизировать код #11
Спасибо за комментарии!
Yandex
Объявления
05.05.2012, 23:37     Помогите оптимизировать код
Ответ Создать тему
Опции темы

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