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

C++

Войти
Регистрация
Восстановить пароль
 
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
#1

Можно ли рисовать в окне нажатием кнопки? - C++

28.07.2011, 00:07. Просмотров 763. Ответов 4
Метки нет (Все метки)

Попытался осуществить таким образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
case WM_COMMAND:
        {
        switch(LOWORD(wParam))
        {
         case ID_BUTTON1:
            {
             PAINTSTRUCT ps1;
            HDC hdc1 = BeginPaint(hwnd, &ps1);
            SetTextColor(hdc1, RGB(0, 0, 0));
            TextOut(hdc1, 60, 90, szHpText, strlen(szHpText));
            EndPaint(hwnd,&ps1);
            }
        }
        }
но при нажатии на ID_BUTTON1 программа вылетает. что делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 00:07     Можно ли рисовать в окне нажатием кнопки?
Посмотрите здесь:

Рисовать в окне из другого потока - Visual C++
Добрый день, написал был код, все работало, но из-за сбоев электрики комп. отключился от сети и как раз мой код оно потерло. Начал...

Приложение позволяющее рисовать в чужом окне - C++
Создать приложение которое позволит рисовать в чужом окне. Не обязательно чтобы было полноценное приложение типа Paint, можно даже...

Перемещение компонента Edit нажатием на кнопки - C++ Builder
Как переместить компонент Edit вправо, вниз нажатием на кнопки?

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

Как с с нажатием кнопки на клавиатуре заставить двигатся объект! - C++ Builder
Я хочу узнать!Как при нажатии кнопки объект должен передвинутся влево или вправо! И как его заставить двигаться!

из формы нажатием кнопки вызвать программу которая написана в консоли - C++ Builder
Можно ли из формы нажатием кнопки вызвать программу которая написана в консоли?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 00:35     Можно ли рисовать в окне нажатием кнопки? #2
показывайте весь код
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
28.07.2011, 13:04  [ТС]     Можно ли рисовать в окне нажатием кнопки? #3
Вот:

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
#include <windows.h>
#define ID_BUTTON1 3000
 
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
HINSTANCE hInstance;
 
char szClass[] = "LcBotClass";
char szHpText[] = "Текст";
 
int WINAPI WinMain (HINSTANCE hInst,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszCmdLine,
                    int nCmdShow)
 
{
    HWND hwnd;               
    MSG msg;            
    hInstance = hInst;
    hwndGlobal = hwnd;
    
    if(!RegClass(WndProc, szClass, COLOR_WINDOW)) return FALSE;
    
 
     hwnd = CreateWindow(
        szClass,
        "LC bot by SDmaN",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        640,
        480,
        0,
        0,
        hInstance,
        NULL
        );
        
     if(!hwnd) return FALSE;
     
     while(GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg);
     return msg.wParam;
     }
 
BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{
     WNDCLASS wc;
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.cbClsExtra = wc.cbWndExtra = 0;
     wc.lpfnWndProc = Proc;
     wc.hInstance = hInstance;
     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
     wc.hbrBackground = (HBRUSH)(brBackground + 1);
     wc.lpszMenuName = NULL;
     wc.lpszClassName = szName;
     return (RegisterClass(&wc)!= 0);
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 char szHpText[] = "Êîëè÷åñòâî ÕÏ ïåðñîГ*Г*Г¦Г*: ";
 char szMpText[] = "Êîëè÷åñòâî ГЊГЏ ïåðñîГ*Г*Г¦Г*: ";
 static HWND hButton;
 switch(msg)
 {
 
    case WM_CREATE:
        {
         hButton = CreateWindow("button",
         "ÑòГ*ðò",
         WS_CHILD | WS_VISIBLE,
         400,
         20,
         150,
         30,
         hwnd,
         (HMENU)ID_BUTTON1,
         hInstance,
         NULL
         );
        }
    
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            SetTextColor(hdc, RGB(0, 0, 0));
            SetTextAlign(hdc, 0);
            TextOut(hdc, 20, 20, szHpText, strlen(szHpText));
            TextOut(hdc, 20, 50, szMpText, strlen(szMpText));
            EndPaint(hwnd,&ps);
            
            return 0;
        }
    case WM_COMMAND:
        {
        switch(LOWORD(wParam))
        {
         case ID_BUTTON1:
            {
             PAINTSTRUCT ps1;
            HDC hdc1 = BeginPaint(hwnd, &ps1);
            SetTextColor(hdc1, RGB(0, 0, 0));
            TextOut(hdc1, 60, 90, szHpText, strlen(szHpText));
            EndPaint(hwnd,&ps1);
            }
        }
        }    
             
       case WM_DESTROY:
     {
     PostQuitMessage(0);
     return 0;
     }
     }
return DefWindowProc(hwnd, msg, wParam, lParam);
}
И ещё вот нарыл в интернете:

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
#include <windows.h> 
 
 
 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
char szProgName[]="Progname";
 char szText[]="";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
 {
 
HWND hWnd; 
 MSG lpMsg; 
 WNDCLASS w;
 
 
 w.lpszClassName=szProgName;
 w.hInstance=hInstance;
 w.lpfnWndProc=WndProc;
 w.hCursor=LoadCursor(NULL, IDC_ARROW);
 w.hIcon=LoadIcon(NULL, IDI_APPLICATION); 
 w.lpszMenuName=0;
 w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 w.style=CS_HREDRAW|CS_VREDRAW;
 w.cbClsExtra=0;
 w.cbWndExtra=0;
 
 
 if(!RegisterClass(&w))
 return 0;
 
 
 hWnd=CreateWindow(szProgName, //Èìÿ ïðîãðГ*ììû
 "Keyboard Code Viewer - 1.0", 
 WS_OVERLAPPEDWINDOW, 
 100, 
 100, 
 100, 
 80, 
 (HWND)NULL,
 (HMENU)NULL, 
 (HINSTANCE)hInstance, 
 (HINSTANCE)NULL); 
 
 
 ShowWindow(hWnd, nCmdShow);
 
 UpdateWindow(hWnd);
 
 
 
while(GetMessage(&lpMsg, NULL, 0, 0)) { 
 TranslateMessage(&lpMsg); 
 DispatchMessage(&lpMsg); 
 }
 return(lpMsg.wParam); 
 }
 
 
 LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, 
 WPARAM wParam, LPARAM lParam)
 {
 HDC hdc;
 
 
 switch(messg)
 {
 
unsigned int key;
 
 
 case WM_KEYDOWN:
 key=wParam; 
 _itoa(key, szText, 10); 
 hdc=GetDC(hWnd); 
 TextOut(hdc, 10,10, szText, 2);
 break;
 
 
 case WM_DESTROY:
 PostQuitMessage(0);
 break;
 
default:
 return(DefWindowProc(hWnd, messg, wParam, lParam));
 }
 return 0;
 }
Принцып почти такой же как и у моей программы, только различие в том, что в последнем примере программа преобразует код нажатой клавиши в строку.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 13:31     Можно ли рисовать в окне нажатием кнопки? #4
ваша беда в том что вы не знаете сиснтаксиса языка программирования на котором вы "программируете", вот ваша программа, теперь она не закрываеться, но рисовать она вам ничего не будет ибо вы не правильно это делаете потому что не читаете книжки
Код
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
#include <windows.h>
#define ID_BUTTON1 3000
 
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
HINSTANCE hInstance;
 
char szClass[] = "LcBotClass";
char szHpText[] = "Текст";
 
int WINAPI WinMain (HINSTANCE hInst,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszCmdLine,
                    int nCmdShow)
 
{
    HWND hwnd;               
    MSG msg;            
    hInstance = hInst;
   
    
    if(!RegClass(WndProc, szClass, COLOR_WINDOW)) return FALSE;
    
 
     hwnd = CreateWindow(
        szClass,
        "LC bot by SDmaN",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        640,
        480,
        0,
        0,
        hInstance,
        NULL
        );
        
     if(!hwnd) return FALSE;
     
     while(GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg);
     return msg.wParam;
     }
 
BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{
     WNDCLASS wc;
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.cbClsExtra = wc.cbWndExtra = 0;
     wc.lpfnWndProc = Proc;
     wc.hInstance = hInstance;
     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
     wc.hbrBackground = (HBRUSH)(brBackground + 1);
     wc.lpszMenuName = NULL;
     wc.lpszClassName = szName;
     return (RegisterClass(&wc)!= 0);
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    char szHpText[] = "Количество ХП персонажа: ";
    char szMpText[] = "Количество МП персонажа: ";
    static HWND hButton;
    switch(msg)
    {
    case WM_CREATE:
        hButton = CreateWindow("button", "Старт", WS_CHILD | WS_VISIBLE, 400, 20, 
                               150, 30, hwnd, (HMENU)ID_BUTTON1, hInstance, NULL );
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            SetTextColor(hdc, RGB(0, 0, 0));
            SetTextAlign(hdc, 0);
            TextOut(hdc, 20, 20, szHpText, strlen(szHpText));
            TextOut(hdc, 20, 50, szMpText, strlen(szMpText));
            EndPaint(hwnd,&ps);
        }
        break;
    case WM_COMMAND:
        
        switch(LOWORD(wParam))
        {
         case ID_BUTTON1:
             PAINTSTRUCT ps1;
            HDC hdc1 = BeginPaint(hwnd, &ps1);
            SetTextColor(hdc1, RGB(0, 0, 0));
            TextOut(hdc1, 60, 90, szHpText, strlen(szHpText));
            EndPaint(hwnd,&ps1);
            
        }
        break;
             
     case WM_DESTROY:
          PostQuitMessage(0);
          return 0;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 14:01     Можно ли рисовать в окне нажатием кнопки?
Еще ссылки по теме:

Treeview Drag'n'Drop как рисовать линии и кнопки в дереве? - C++ Builder
Собственно сабж, есть Treeview хочу получить нарисованную ветку... Image + Text ... Можно получить, а вот как нарисовать плюсик(&quot;+&quot;) и...

Рисовать в С++ можно? - C++
Недавно начал изучать С++, с помощью книжки &quot;для чайников&quot;. Использую компилятор Dev c++ Есть опыт программирования на QBASIC. Вобщем...

Цикл: Выйти в любой момент времени из цикла while нажатием определённой кнопки. Как реализовать? - C++
Необходимо выйти в любой момент времени из цикла while нажатием определённой кнопки. Как реализовать?

Можно ли рисовать мышью в консоли? - C++ Builder
Если можно,то приведите пример, пожалуйста?


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
28.07.2011, 14:01     Можно ли рисовать в окне нажатием кнопки? #5
Цитата Сообщение от SDmaN Посмотреть сообщение
case ID_BUTTON1:
{
PAINTSTRUCT ps1;
HDC hdc1 = BeginPaint(hwnd, &ps1);
SetTextColor(hdc1, RGB(0, 0, 0));
TextOut(hdc1, 60, 90, szHpText, strlen(szHpText));
EndPaint(hwnd,&ps1);
}
Цитата Сообщение от SDmaN Посмотреть сообщение
но при нажатии на ID_BUTTON1 программа вылетает. что делать?
и будет вылетать
BeginPain EndPaint для WM_PAINT
для рисования в других местах GetDC хотя бы

Добавлено через 3 минуты
Цитата Сообщение от SDmaN Посмотреть сообщение
Принцып почти такой же как и у моей программы,
Цитата Сообщение от SDmaN Посмотреть сообщение
case WM_KEYDOWN:
key=wParam;
_itoa(key, szText, 10);
hdc=GetDC(hWnd);
TextOut(hdc, 10,10, szText, 2);
break;
Цитата Сообщение от SDmaN Посмотреть сообщение
PAINTSTRUCT ps1;
HDC hdc1 = BeginPaint(hwnd, &ps1);
SetTextColor(hdc1, RGB(0, 0, 0));
TextOut(hdc1, 60, 90, szHpText, strlen(szHpText));
EndPaint(hwnd,&ps1);
разницу видишь
Yandex
Объявления
28.07.2011, 14:01     Можно ли рисовать в окне нажатием кнопки?
Ответ Создать тему
Опции темы

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