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

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

Восстановить пароль Регистрация
 
ssashas
0 / 0 / 0
Регистрация: 17.03.2009
Сообщений: 20
10.05.2010, 17:56     KeyDown не работает #1
Здравствуйте, я пишу программу судоку и сделал так что при нажатии на клеточку она выделяется после этого юзер нажимает клавишу с цифрой на клавиатуре и цифра ставится в клеточку. После этого я добавил кнопку и сообщение 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2010, 17:56     KeyDown не работает
Посмотрите здесь:

Обработка KeyDown C++
C++ KeyDown обрабатывает только символы
C++ Не могу разобраться почему не работает программа(Код, написанный на Borland C++ не работает в Dev C++)
C++ Почему в динамическом массиве не работает то, что работает со статическим?
std::string код работает в VS 6.0, но не работает в VS2012 (error C4996) C++
C++ setprecision() не работает, или работает не так как нужно
Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает C++
Multimap STL - работает только запись в файл, поиск в файле не работает C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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