Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 09:56   #1
Abbath1349
Пользователь
 
Регистрация: 23.10.2010
Сообщений: 25
По умолчанию WIN 32 API Шахматная Доска(На дочерних окнах)

Нужно сделаь шахматную доску на Win 32 API C++ с помощью дочерних оконо у меня не получается её расскрасить может кто ни будь помочь? Код ниже:
Код:
#define NUMWIN 8

LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM, LPARAM);
TCHAR ChildClassName[MAX_LOADSTRING] = _T("WinChild");

ATOM MyRegisterChildClass()
{
    WNDCLASSEX wcex    = { 0 };
    wcex.cbSize            = sizeof(WNDCLASSEX);
    wcex.lpfnWndProc    = ChildProc;
    wcex.hInstance        = hInst;
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszClassName    = ChildClassName;
    return RegisterClassEx(&wcex);
}


bool s=1;
int x=1;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{    
    int i,j;
    static int sx, sy;
    static HWND hChild[NUMWIN][NUMWIN];
    
    switch (message)
    {
    case WM_CREATE: 
        MyRegisterChildClass();
        for (i = 0; i < NUMWIN; i++)
            for(j=0;j<NUMWIN;j++)
            hChild[i][j] = CreateWindow(ChildClassName, NULL, WS_CHILD |
            WS_DLGFRAME | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
        break;
    case WM_SIZE:
        sx = LOWORD(lParam)/NUMWIN;    
        sy = HIWORD(lParam)/NUMWIN;    
        
        for (i = 0; i < NUMWIN; i++)
            for(j=0;j<NUMWIN;j++)
            {    MoveWindow(hChild[i][j],i*sx, j*sy, sx, sy, TRUE);
                UpdateWindow(hChild[i][j]);

     x++;
      
            if(i+j&1)
            s=0;
            else
            s=1;
     
       }
    
              break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rt;
    TCHAR sx[10];
    int i, j;
  HBRUSH   ColorBrush[2];
    switch(message)
    {
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &rt);
     ColorBrush[0]=CreateSolidBrush(RGB(255,255,0));
     ColorBrush[1]=CreateSolidBrush(RGB(0,0,255));
     if(s)
     {
      _swprintf(sx,_T("%d"),x);
      FillRect(hdc,&rt,ColorBrush[1]);
     }
     else
     {
          
      FillRect(hdc,&rt,ColorBrush[0]);
         _swprintf(sx,_T("x %d"),x);
     }
     TextOut(hdc,10,10,sx,_tcslen(sx));

     EndPaint(hWnd,&ps);
     DeleteObject(ColorBrush[0]);
     DeleteObject(ColorBrush[1]);
     break;
    
        default: return DefWindowProc(hWnd, message, wParam, lParam);

    }
    return 0;
}

Последний раз редактировалось Stilet; 23.10.2010 в 17:24.
Abbath1349 вне форума Ответить с цитированием
Старый 23.10.2010, 16:50   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Ну вообще-то всё раскрашивается... Правда первая "строчка" вразнобой получается - вы это имели ввиду? Так нужно "if (i+j&1)" проверять перед MoveWindow...

Не знаю что именно нужно, но я бы по-другому сделал...
Код:
#include <windows.h>
#define NUMWIN 8

HINSTANCE hInst;
HWND hChild[NUMWIN][NUMWIN];

HWND CreateChild(HWND hWnd, int k)
{
	if (k>0)
		return CreateWindow("ClildBlack", NULL, WS_CHILD | WS_DLGFRAME | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
	else
		return CreateWindow("ClildWhite", NULL, WS_CHILD | WS_DLGFRAME | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int i, j;
	int sx, sy;
	switch (message)
	{
		case WM_CREATE:
			for (i=0; i<NUMWIN; i++)
				for(j=0; j<NUMWIN; j++)
					hChild[i][j]=CreateChild(hWnd, ((i%2)+j)%2);
			break;
		case WM_SIZE:
			sx=LOWORD(lParam)/NUMWIN;
			sy=HIWORD(lParam)/NUMWIN;
			for (i=0; i<NUMWIN; i++)
				for(j=0; j<NUMWIN; j++)
				{
					MoveWindow(hChild[i][j], i*sx, j*sy, sx, sy, TRUE);
					UpdateWindow(hChild[i][j]);
				}
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	return DefWindowProc(hWnd, message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	hInst=hInstance;
    MSG msg;
    WNDCLASS w={0};
    w.style=CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc=WndProc;
    w.hInstance=hInst;
    w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName="My Class";
    RegisterClass(&w);

	WNDCLASSEX wcex1={0};
	wcex1.cbSize=sizeof(WNDCLASSEX);
	wcex1.lpfnWndProc=ChildProc;
	wcex1.hInstance=hInst;
	wcex1.hCursor=LoadCursor(NULL, IDC_ARROW);
	wcex1.hbrBackground=CreateSolidBrush(RGB(255, 255, 255));
	wcex1.lpszClassName="ClildWhite";
	RegisterClassEx(&wcex1);

	WNDCLASSEX wcex2={0};
	wcex2.cbSize=sizeof(WNDCLASSEX);
	wcex2.lpfnWndProc=ChildProc;
	wcex2.hInstance=hInst;
	wcex2.hCursor=LoadCursor(NULL, IDC_ARROW);
	wcex2.hbrBackground=CreateSolidBrush(RGB(0, 0, 0));
	wcex2.lpszClassName="ClildBlack";
	RegisterClassEx(&wcex2);

	CreateWindow("My Class", "My Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 300, 200, 200, 180, NULL, NULL, hInst, NULL);
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
	DeleteObject(wcex1.hbrBackground);
	DeleteObject(wcex2.hbrBackground);
    return msg.wParam;
}
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шахматная доска!!! Евгений19 Помощь студентам 3 08.03.2010 20:02
Шахматная доска Настенька..Блонди Паскаль, Turbo Pascal, PascalABC.NET 2 15.05.2009 23:26
Шахматная доска Shevali Помощь студентам 4 03.04.2009 20:22
шахматная доска Irisha_17_85 Паскаль, Turbo Pascal, PascalABC.NET 4 04.11.2008 10:50