Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
59 / 56 / 8
Регистрация: 22.07.2011
Сообщений: 436
1

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

28.07.2011, 00:07. Просмотров 967. Ответов 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 программа вылетает. что делать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2011, 00:07
Ответы с готовыми решениями:

Место в графическом окне, где можно рисовать и создавать обьекты
хочу чтобы в графическом окне было место ,где отображается все фигуры, линии и т.п . Как это...

Работа с мышью: вывести квадрат нажатием левой кнопки мыши и спрятать его нажатием правой кнопки мыши
Ребят обьясните как вывести квадрат левым нажатием кнопки мыши и спрятав его правым нажатием кнопки...

Нажатием кнопки сделать текст жирным, повторным нажатием - обычным
здравствуйте. такой вопрос , как сделать, чтобы при нажатии кнопки текст печатался жирным, при...

Как можно сделать, нажатием кнопки обнулить данные только с одного поля?
Уважаемые подскажите пожалуйста ,как можно сделать, нажатием кнопки обнулить данные только с одного...

4
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.07.2011, 00:35 2
показывайте весь код
0
59 / 56 / 8
Регистрация: 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;
 }
Принцып почти такой же как и у моей программы, только различие в том, что в последнем примере программа преобразует код нажатой клавиши в строку.
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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);
}
0
Модератор
Эксперт по электронике
8229 / 6096 / 814
Регистрация: 14.02.2011
Сообщений: 21,163
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);
разницу видишь
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2011, 14:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как можно сохранить картинки в ресурсах, а потом выбирать их нажатием соответствующей кнопки
А не подскажите, как можно сохранить картинки в ресурсах, а потом выбирать их нажатием...

Как можно чтобы в диалогом окне были кнопки Yes и NO?
Добрый день! Может кто-то сталкивался с такой задачей: ' в диалогово окне вместо стандартных...

Как можно ловить нажатие кнопки Open в диалоговом окне xlDialogOpen?
Как можно ловить нажатие кнопки Open в диалоговом окне xlDialogOpen? На самом деле, мне нужно...

Нужно изменить доступность кнопки в одной форме нажатием кнопки в другой
Есть две формы. В первой есть кнопка &quot;which&quot; с enabled = false, во второй есть кнопка, нажатие...

Можно ли нажатием "кнопки" сделать некоторое количество копий листа "INVOICE"
Хотелось бы макрос так скажем в листе Алюминий буду добавлять данные, например новую строку добавил...

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


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

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

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