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

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

Войти
Регистрация
Восстановить пароль
 
ssashas
0 / 0 / 0
Регистрация: 17.03.2009
Сообщений: 20
#1

KeyDown не работает - C++

10.05.2010, 17:56. Просмотров 467. Ответов 0
Метки нет (Все метки)

Здравствуйте, я пишу программу судоку и сделал так что при нажатии на клеточку она выделяется после этого юзер нажимает клавишу с цифрой на клавиатуре и цифра ставится в клеточку. После этого я добавил кнопку и сообщение KEYDOWN перестало обрабатываться.
P. S. диалог я создаю в ресурсах(пустой диалог без кнопок с именем DIALOG).
P. P. S. Еще при вводе цифр в клетки одна из нижних клеток обнуляется и в нее невозможно ничего записать.
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
#include <windows.h>
#include <stdio.h>
#include "resource.h"
int s[9][9], otv[9][9], col[9][9];
int xPos,yPos;
int flag=0;
 
void Rand(int s[][9])
{
        for(int i=0;i<3;i++)
                for(int j=0;j<3;j++)
                {
                        int x1=rand()%3;
                        int y1=rand()%3;
                        int x2=x1, y2=y1;
                        while (x2==x1 && y2==y1) 
                        { 
                                x2=rand()%3;
                                y2=rand()%3;
                        }
                        int x3=x1,y3=y1;
                        while ((x3==x1 && y3==y1) || (x3==x2 && y3==y2))
                        {
                                x3=rand()%3;
                                y3=rand()%3;
                        }
                        s[x1+i*3][y1+j*3]=0;
                        s[x2+i*3][y2+j*3]=0;
                        s[x3+i*3][y3+j*3]=0;
                }
}
 
 
int WINAPI fn(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
        switch(cmd)
        {
 
        case WM_CLOSE:
        {
                EndDialog(hwnd,1);
                return 0;
        }
        
 
        case WM_INITDIALOG:
        {
                char c[6];
                c[0]=rand()%2+'1';
                c[1]='.';c[2]='s';c[3]='u';c[4]='d';c[5]=0;
                FILE * f=fopen(c,"rt");
                if (f!=NULL)
                {
                        for(int i=0;i<9;i++)
                        for(int j=0;j<9;j++)
                        {
                        fscanf(f,"%d",&s[i][j]);
                        otv[i][j]=s[i][j];
                        col[i][j]=0;
                        }
                        fclose(f);
                }       
                Rand(s);
                return 1;
        }
 
        case WM_KEYDOWN:
                {
                        if (flag==1)
                        {
                                int i,j,a,b;
                        char c=wp;
                        for( a=0;a<9;a++)
                                for( b=0;b<9;b++)
                                        if ((col[a][b]==1) && (s[a][b]==0))
                                        {
                                                i=a;j=b; a=10;
                                        
                                        }
                        if (c>'0' && c<='9') 
                                s[i][j]=c-'0';
                        else if (c>='a' && c<='i') s[i][j]=c-'a'+1;
                        col[a][b]=0;
                        flag=0;
                        }
                        InvalidateRect(hwnd,NULL,true);
                        return 1;
                        
 
                }
 
        case WM_SIZE:
        {
                InvalidateRect(hwnd,NULL,true);
                return 1;
        }
        
        
 
        case WM_LBUTTONDOWN:
                {
                        int i,j;
                         for(i=0; i<9;i++)
                        for(j=0;j<9;j++) col[i][j]=0;
                        xPos = LOWORD(lp); 
                        yPos = HIWORD(lp); 
                        i=xPos/50;
                        j=yPos/50;
                        if (s[i][j]==0)
                        {
                                flag=1;
                                col[i][j]=1;
                        }
                        InvalidateRect(hwnd,NULL,true);
                }
 
        case WM_PAINT:
                {                               
                PAINTSTRUCT ps;
                HDC hdc=BeginPaint(hwnd, &ps);
                int i, j;
                for(i=0; i<9;i++)
                        for(j=0;j<9;j++)
                        {
                                HBRUSH br;
                                if (col[i][j]==0)
                                br=CreateSolidBrush(RGB(255,255,255));
                                else
                                br=CreateSolidBrush(RGB(255,255,0));
                                HBRUSH old_br=(HBRUSH)SelectObject(hdc,br);
                                HFONT font=CreateFont(40,25,0,0,FW_HEAVY,false,false,false,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,TEXT("EditText"));
                                HFONT old_font=(HFONT)SelectObject(hdc,font);
                                Rectangle(hdc,50*i,50*j,50*(i+1),50*(j+1));     
                                if (s[i][j]!=0)
                                {
                                        wchar_t buf[20];        
                                        swprintf(buf,L"%d",s[i][j]);
                                        TextOut(hdc,50*i+12,50*j+4,(LPCSTR) buf,wcslen(buf));
                                }
                                SelectObject(hdc,old_font);
                                DeleteObject(font);
                                SelectObject(hdc,old_br);
                                DeleteObject(br);
                        }
                EndPaint(hwnd, &ps);                    
                }
 
 
        return 0;
        }
        return 0;
}
 
 
 
 
int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int) 
{
        srand(GetTickCount());
        return DialogBox(hi,MAKEINTRESOURCE(DIALOG),NULL,(DLGPROC)fn);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2010, 17:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос KeyDown не работает (C++):

Обработка KeyDown - C++
Есть активная форма с кнопками. Надо шоб при нажатии какой-нить кнопки на клавиатуре шла обработка нажатия по общему шаблону для разных...

KeyDown обрабатывает только символы - C++
Всем привет. Собственно сам вопрос, когда я вызываю функцию (пишу на WinApI, но вопрос из основ c++) Она реагирует только на буквы, цифры,...

Не работает KeyDown - C#
Пытаюсь перенести старые наработки 2d движка с Java на C#. Вот столкнулся с проблемой. Клик на кнопку выдает ошибку, ругается конкретно на...

KeyDown не работает - C#
почему не работает KeyDown? Создаю новый проект,свойство KeyPreview ставлю в true using System; using System.Collections.Generic; ...

KeyDown не работает - Visual C++
Здравствуйте, я пишу программу судоку и сделал так что при нажатии на клеточку она выделяется после этого юзер нажимает клавишу с цифрой...

.NET 4.x Не работает KeyDown - C#
Возникла проблема: я хочу, чтобы при нажатии определённой клавиши на клавиатуре происходило событие, но: this.KeyDown +=...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2010, 17:56
Привет! Вот еще темы с ответами:

Не работает событие KeyDown - C#
Подскажите пожалуйста, вот по условию при нажатии клавиши F - Leble должен менять надпись на (123), но этого не происходит, что там не...

KeyDown работает в одиночестве. - C#
Всем Здрасте. Тут вот какое дело. Считывание нажатой клавиши идёт так: public Form1() { ...

.NET 4.x Не работает обработчик события KeyDown - C#
Здравствуйте, имеется текстбокс и обработчик события KeyDown: private void textBox1_Key(object sender, KeyEventArgs e) { ...

MyBase.KeyDown не работает на WebBrowser - Visual Basic .NET
Доброе утро! Проблема в следующем. Есть обычный код для осуществления горячих клавиш на форме. Private Sub frm_Main_KeyDown(sender As...


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

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

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