Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
1

Класс Windows

31.03.2010, 10:41. Показов 1591. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хотелось бы создать класс окна для более удобной работы...
Какие методы вообще есть???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2010, 10:41
Ответы с готовыми решениями:

Класс кнопок для сапера Windows
Никак не могу сделать интерфейс сапера используя ВинАпи. Обычные кнопки не реагируют на нажатия...

Как запихнуть события сообщений windows в класс?
Привет всем.К примеру у меня есть сообщение WM_MOUSEMOVE и я хочу написать к нему событие...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { ...

Класс Widget для Windows
Как мне известно библиотека MFC это обертка WinApi/ А как создавалось Qt. В частности как например...

4
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
31.03.2010, 17:31 2
Имеется ввиду RegisterClass() и/или RegisterClassEx() или что-то другое?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
01.04.2010, 01:56  [ТС] 3
Имеется в виду написание класса, чтобы можно было создавать окна не переписывая функции и управлять окном... ну что-то вроде такого
C++
1
2
3
4
#include "Win.h" // файл с описанием класса
// ...
Win w; // создать объект "окно"
w.Show();
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
01.04.2010, 07:30 4
Вот что может помочь для создания класса:
http://winprog.org/tutorial/fi... al-pdf.zip
http://winprog.org/tutorial/fi... al-pdf.zip

Только вот не понятен ваш вопрос.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
06.04.2010, 18:00  [ТС] 5
Я имел в виду что-то наподобие следующего, но такое решение мне не совсем нравится
WIN.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
#pragma once
 
/*--------------------------------------------------------------------------------------+
|                                   CLASS CWINDOW                                       |
+--------------------------------------------------------------------------------------*/
class CWindow
{
public:
    /* Переменные */
    HWND  m_hWnd;
    /* Конструктор   */
    CWindow(void);
    /* Методы */
    virtual bool CreateEx(HINSTANCE hInst,
                          LPCTSTR lpszName,
                          LPCTSTR lpszClass = "CWINDOW",
                          DWORD dwExStyle   = 0,
                          DWORD dwStyle     = WS_OVERLAPPEDWINDOW,
                          int x             = CW_USEDEFAULT,
                          int y             = CW_USEDEFAULT,
                          int nWidth        = CW_USEDEFAULT,
                          int nHeight       = CW_USEDEFAULT,
                          HWND hParent      = NULL,
                          HMENU hMenu       = NULL);
 
    bool RegisterClass(LPCTSTR lpszClass, HINSTANCE hInst);
    virtual WPARAM MessageLoop(void);
    BOOL ShowWindow(int nCmdShow) const;
    BOOL UpdateWindow(void) const;
 
private:
    virtual void OnDraw(HDC hDC);
    virtual void OnKeyDown(WPARAM wParam, LPARAM lParam);
    virtual LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    virtual void GetWndClassEx(WNDCLASSEX &wc);
private:
    static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};

WIN.CPP
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <windows.h>
 
#include "win.h"
 
/*--------------------------------------------------------------------------------------+
|                           РЕАЛИЗАЦИЯ CLASSA CWINDOW                                 |
+--------------------------------------------------------------------------------------*/
CWindow::CWindow()                                  
{
    m_hWnd = NULL;                                  
}
 
void CWindow::OnDraw(                               
                        HDC hDC)                    
{
}
 
void CWindow::OnKeyDown(                            
                        WPARAM wParam,              
                        LPARAM lParam)              
{
}
 
LRESULT CWindow::WndProc(                           
                         HWND hWnd,                 
                         UINT uMsg,                 
                         WPARAM wParam,             
                         LPARAM lParam)             
{
    switch(uMsg)
    {
        case WM_KEYDOWN:                            
            OnKeyDown(wParam, lParam);              
            return 0;                               
 
        case WM_PAINT:                              
        {
            PAINTSTRUCT ps;                         
                
            BeginPaint(m_hWnd, &ps);                
            OnDraw(ps.hdc);                         
            EndPaint(m_hWnd, &ps);                  
        }
        return 0;                                   
 
        case WM_DESTROY:                            
            PostQuitMessage(0);                     
            return 0;                               
    }
    return DefWindowProc(hWnd,                      
                         uMsg, wParam, lParam);     
}
 
LRESULT CALLBACK CWindow::WindowProc(               
                                     HWND hWnd,     
                                     UINT uMsg,     
                                     WPARAM wParam, 
                                     LPARAM lParam) 
{
    CWindow *pWindow;                               
        
    if (uMsg == WM_NCCREATE)                        
    {   
        MDICREATESTRUCT *pMDIC = 
        (MDICREATESTRUCT*)((LPCREATESTRUCT)lParam)->lpCreateParams;
 
        pWindow = (CWindow*)(pMDIC->lParam);
 
        SetWindowLong(hWnd, GWL_USERDATA, (LONG) pWindow);
    }
    else
        pWindow = (CWindow*)GetWindowLong(hWnd, GWL_USERDATA);
 
    if (pWindow)
        return pWindow->WndProc(hWnd, uMsg, wParam, lParam);
    else
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
 
void CWindow::GetWndClassEx(                        
                            WNDCLASSEX &wc)         
{
    memset(& wc, 0, sizeof(wc));                    
    /* Здесь реализуется заполнения шаблона
    значениями по-умолчанию, то есть такие 
    параметры будут иметь все созданные окна
    при помощи класса CWindow.
    */
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = CS_HREDRAW | CS_VREDRAW;     
    wc.lpfnWndProc   = WindowProc;                  
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;       
    wc.hInstance     = NULL;
    wc.hIcon         = NULL;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = NULL;
    wc.hIconSm       = NULL;
}
 
bool CWindow::CreateEx(                             
                       HINSTANCE hInst,             
                       LPCTSTR lpszName,            
                       LPCTSTR lpszClass,           
                       DWORD dwExStyle,             
                       DWORD dwStyle,               
                       int x, int y,                
                       int nWidth, int nHeight,     
                       HWND hParent,                
                       HMENU hMenu)                 
{
    if (!RegisterClass(lpszClass, hInst))
        return false;
 
    MDICREATESTRUCT mdic;
    memset(& mdic, 0, sizeof(mdic));
    mdic.lParam = (LPARAM) this;
 
    m_hWnd = CreateWindowEx(dwExStyle, lpszClass, 
             lpszName, dwStyle, x, y, nWidth, nHeight, 
             hParent, hMenu, hInst, & mdic);
    
    return m_hWnd != NULL;
}
 
bool CWindow::RegisterClass(                        
                            LPCTSTR lpszClass,      
                            HINSTANCE hInst)        
{
    WNDCLASSEX wc;
    wc.cbSize = sizeof(wc);
 
    if (!GetClassInfoEx(hInst, lpszClass, &wc))
    {
        GetWndClassEx(wc);                          
 
        wc.hInstance     = hInst;                   
        wc.lpszClassName = lpszClass;               
 
        if (!RegisterClassEx(&wc))
            return false;
    }
 
    return true;
}
 
WPARAM CWindow::MessageLoop()                       
{
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
BOOL CWindow::ShowWindow(int nCmdShow) const        
{
    return ::ShowWindow(m_hWnd, nCmdShow);
}
 
BOOL CWindow::UpdateWindow(void) const              
{
    return ::UpdateWindow(m_hWnd);
}

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
#include <windows.h>
#include "win.h"
 
/* Класс дочерний от CWindow */
class ChildWin : public CWindow
{
private:
    /* WM_PAINT */
    void OnDraw(HDC hDC)
    {
        TextOut(hDC, 20, 20, "HELLO, WORLD!", 13);
    }
    /* WM_ONKEYDOWN */  
    void OnKeyDown(WPARAM wParam, LPARAM lParam)
    {
        switch(wParam)
        {
        case VK_ESCAPE:
            PostMessage(m_hWnd, WM_CLOSE, wParam, lParam);
            break;
        }
    }
};
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpCmd, int nShow)
{
    CWindow CWIN;                                               /* I. ПРИМЕР СОЗДАНИЯ ОКНА CWINDOW */
    CWIN.CreateEx(hInst, "ПРИМЕР ОКНА CWINDOW");              // 1. CreateEx      - создать окно
    CWIN.ShowWindow(nShow);                                     // 2. ShowWindow    - показать окно
    CWIN.UpdateWindow();                                        // 3. UpdateWindow  - обновить окно
    /*CWIN.MessageLoop();*/                                     // 4. MessageLoop   - запустить цикл обработки сообщений
 
    ChildWin CCHILD;                                            /* II. ПРИМЕР СОЗДАНИЯ ОКНА НА ОСНВОВЕ CWINDOW */
    CCHILD.CreateEx(hInst,"ПРИМЕР ДОЧЕРНЕГО ОКНА CWINDOW",       // Процедура создания окна ничем не отличается,
                    "CWINDOWCHILD",                             // Подробнее смотреть описание класса ChildWin.
                    0, WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT, CW_USEDEFAULT,
                    200, 200);
    CCHILD.ShowWindow(nShow);
    CCHILD.UpdateWindow();
 
    CCHILD.MessageLoop();
    CWIN.MessageLoop();
 
    return 0;
}
0
06.04.2010, 18:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2010, 18:00
Помогаю со студенческими работами здесь

Класс TRegistry для работы с реестром Windows
Есть класс TRegistry для работы с реестром операционной системы Windows. И тут же возникает вопрос,...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... ...

Использование структур в управляемом классе (класс окна Windows Forms)
Здравствуйте гуру! Появилась проблема в использовании собственных структур в управляемом классе...

Отдельно класс данных, класс формул и главный класс
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это...

windows form и класс
Ребят подскажите как наследовать класс моей форме(изначально форма наследует класс Form,если его...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru