Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Что за коды ?!  (Прочитано 20227 раз)
0 Пользователей и 1 Гость смотрят эту тему.
New_Pi
Гость
« : 02-01-2005 16:50 » 

Я хочу, чтобы программа меняла размеры 15 кнопок в окне пропорционально размерам основного окна. Вот код, который почему - то не пашет:

#define BTN 16
HWND MyBtn[BTN];
...................
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   int wmId, wmEvent;
   PAINTSTRUCT ps;
   HDC hdc;

   switch (message)
   {
   case WM_SIZE:
      xWindowSize = LOWORD(lParam);
      yWindowSize = HIWORD(lParam);
      xBtn -= xWindowSize/4;
      yBtn -= yWindowSize/4;
      btn = 0;
      for(int i = 0; i < 4; i++)
      {
         yBtn+=yWindowSize/4;
         for (int j = 0; j < 4; j++)
         {
            xBtn+=xWindowSize/4;
            btn++;
            if (!(btn<15)){break;}
            SendMessage(MyBtn[btn],WM_SIZE,SIZE_RESTORED|SIZE_MAXIMIZED,LOWORD(xBtn,yBtn,xWindowSize/4,yWindowSize/4));
         }
      }
      break;
...........
void MyCreate(HWND hWnd)
{

MyBtn[1] = CreateWindow("BUTTON","1",WS_CHILD|WS_VISIBLE|WS_BORDER,0,0,40,40,hWnd,NULL,hInst,NULL);
...



Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 02-01-2005 17:45 » 

1. #define BTN 16
меняла размеры 15 кнопок

Ты объявил на однгу кнопку больше.

2. if (!(btn<15)){break;} некорректно надо писать if (btn == 15 ) break;
Более того break используется для выхода обычно либо
а) по ошибке
б) из цикла типа while.

Учитывая что ты делаешь двойной цикл - а break выбивает только из одного - то в верхнем цикле ты будешь родолжать крутиться пока не пройдешь все 4 такта...
Да и более того - при 16 объявленных кнопках двойной цикл 4х4 дает 16 тактов - и не стоит проверять и некорректно выбивать.

3.  Вижу посылку сообщения в никуда - CreateWindow должен вызываться до этого - из примера не видно где и когд он вызван.

4. ShowWindow(SW_SHOW); кто за тебя будет делать после CreateWindow Не понял
 
Записан

А птичку нашу прошу не обижать!!!
New_Pi
Гость
« Ответ #2 : 02-01-2005 18:05 » 

#define BTN 16 - ничего не меняет, но я изменил его. Вот ответ, зачем я сделал выход из цикла.
В цикле обрабатывается 16 сообшений, у меня 15 кнопок... (это так сказать матрица 4*4 из кнопок, где не хватает одной кнопки). Если выход из последнего цикла происходит не с помошью breake, тогда с помошью чего ?

(Учитывая что ты делаешь двойной цикл - а break выбивает только из одного - то в верхнем цикле ты будешь родолжать крутиться пока не пройдешь все 4 такта...)

Этого не будет, так как выход произойдёт на последнем такте верхнего цикла.
Но в общем вопрос заключается не в этом.Как заставить кнопки изменяться в размере.

3,4 пункт я не понял, но всё у меня показывается, только не меяются размеры...
Записан
dimedrol
Помогающий

ru
Offline Offline

« Ответ #3 : 02-01-2005 18:39 » 

A SetWindowPos не пробовал? Там тоже можно размер окна задать.
C уважением dimedrol.
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
New_Pi
Гость
« Ответ #4 : 02-01-2005 19:01 » 

dimedrol  могу попробывать, если пойму, как ей пользоваться  Улыбаюсь
Если не сложно - напиши что этой функцийй надо по подробнее, а то в хелпере я не разобрался
BOOL SetWindowPos(
  HWND hWnd,             // handle to window
  HWND hWndInsertAfter,  // placement-order handle
  int X,                 // horizontal position
  int Y,                 // vertical position
  int cx,                // width
  int cy,                // height
  UINT uFlags            // window-positioning options)

HWND hWndInsertAfter ?,  UINT uFlags ?
  HWND hWnd - хендл кнопки, или главного окна ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 02-01-2005 19:23 » 

New_Pi,

Цитата
uFlags

Specifies the window sizing and positioning flags. This parameter can be a combination of the following values:

Value   Meaning
SWP_DRAWFRAME   Draws a frame (defined in the window's class description) around the window.
SWP_FRAMECHANGED   Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE is sent only when the window's size is being changed.
SWP_HIDEWINDOW   Hides the window.
SWP_NOACTIVATE   Does not activate the window. If this flag is not set, the window is activated and moved to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter parameter).
SWP_NOCOPYBITS   Discards the entire contents of the client area. If this flag is not specified, the valid contents of the client area are saved and copied back into the client area after the window is sized or repositioned.
SWP_NOMOVE   Retains the current position (ignores the X and Y parameters).
SWP_NOOWNERZORDER   Does not change the owner window's position in the Z order.
SWP_NOREDRAW   Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent window uncovered as a result of the window being moved. When this flag is set, the application must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.
SWP_NOREPOSITION   Same as the SWP_NOOWNERZORDER flag.
SWP_NOSENDCHANGING   Prevents the window from receiving the WM_WINDOWPOSCHANGING message.
SWP_NOSIZE   Retains the current size (ignores the cx and cy parameters).
SWP_NOZORDER   Retains the current Z order (ignores the hWndInsertAfter parameter).
SWP_SHOWWINDOW   Displays the window.
Хендл всегда указывается того окна, которое ты хочеш изменить.

Цитата
hWndInsertAfter

Identifies the window to precede the positioned window in the Z order. This parameter must be a window handle or one of the following values:

Value   Meaning
HWND_BOTTOM   Places the window at the bottom of the Z order. If the hWnd parameter identifies a topmost window, the window loses its topmost status and is placed at the bottom of all other windows.
HWND_NOTOPMOST   Places the window above all non-topmost windows (that is, behind all topmost windows). This flag has no effect if the window is already a non-topmost window.
HWND_TOP   Places the window at the top of the Z order.
HWND_TOPMOST   Places the window above all non-topmost windows. The window maintains its topmost position even when it is deactivated.
 

Это нужно для изменения Z уровня окна.

Пример для изменения позиции:
SetWindowPos(MyBtn[btn], NULL, 20,20,0,0, SWP_NOZORDER | SWP_NOSIZE);
Пример для изменения размера:
SetWindowPos(MyBtn[btn], NULL, 0,0,20,20, SWP_NOZORDER | SWP_NOMOVE);
« Последнее редактирование: 20-12-2007 19:15 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #6 : 02-01-2005 20:13 » 

А что не понятного???
Ты прислал кусок кода
в п.3 я спрашиваю где и как ты вызываешь создание кнопок.
Кроме того из всего послания не понятно нихрена что у тебя не работает - полагал, что ты не видишь кнопок...
Изменение размера кнопок делается с помощью SetWindowPos

Call this member function to change the size, position, and Z-order of child, pop-up, and top-level windows.

Вызовите эту функцию для измененеия позиции, РАЗМЕРА, и порядка расположения окон.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setwindowpos.asp
ссылка на MSDN
Все перематры яснее ясного.
Записан

А птичку нашу прошу не обижать!!!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 02-01-2005 20:49 » 

а я с некоторых пор пользуюсь WINDOWPLACEMENT
Код:

#define _getWPM(ID,wpm) (GetDlgItem(ID)->GetWindowPlacement(&wpm))
#define _setWPM(ID,wpm) (GetDlgItem(ID)->SetWindowPlacement(&wpm))
#define _WPMtop(wpm) (wpm.rcNormalPosition.top)
#define _WPMbot(wpm) (wpm.rcNormalPosition.bottom)
#define _WPMlef(wpm) (wpm.rcNormalPosition.left)
#define _WPMrig(wpm) (wpm.rcNormalPosition.right)
#define _WPMwid(wpm) (wpm.rcNormalPosition.right-wpm.rcNormalPosition.left+1)
#define _WPMhig(wpm) (wpm.rcNormalPosition.bottom-wpm.rcNormalPosition.top+1)

//пересчёт размеров элементов
void CGuard2View::ResizeWatcherElements()
{
WINDOWPLACEMENT wpm;CRect rect;
long Xmax,Xmin,W0,W1,W2,Ymax,Ymin,H4,H5;
//достаём размеры вьюхи
GetClientRect(&rect);Xmin=0;Xmax=rect.Width()-1;Ymin=0;Ymax=rect.Height()-1;

//очередной элемент
_getWPM(IDC_pbarTMF_FILLING,wpm);
//достаём ширину элемента
W0=_WPMwid(wpm);
//делаем элемент максимальной высоты
_WPMtop(wpm)=Ymin;_WPMbot(wpm)=Ymax;
//двигаем элемент вправо до упора
_WPMrig(wpm)=Xmax;
_WPMlef(wpm)=Xmax-(W0-1);
//новое расположение элемента
_setWPM(IDC_pbarTMF_FILLING,wpm);

//и так далее...
}

вызов этой процедуры помещаю в обработчик сообщения о перемещении главного окна
WM_WINDOWPOSCHANGED

работает на ура
Записан

New_Pi
Гость
« Ответ #8 : 03-01-2005 08:53 » 

в общем в функции я разобрался  Улыбаюсь, но программа на пашет.
Вот весь код: (она должна изменять размеры кнопок и место их положения пропорционально основному окну)

#include "stdafx.h"
#include "Heardake.h"
#define MAX_LOADSTRING 100
#define BTN 15
// Global Variables:
HINSTANCE hInst;
HWND MyhWnd;
HWND MyBtn[BTN];
TCHAR szTitle[MAX_LOADSTRING];         
TCHAR szWindowClass[MAX_LOADSTRING];         
// Forward declarations of functions included in this code module:
ATOM            MyRegisterClass(HINSTANCE hInstance);
BOOL            InitInstance(HINSTANCE, int);
LRESULT CALLBACK   WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK   About(HWND, UINT, WPARAM, LPARAM);
void MyCreate(HWND hWnd);

int xWindowSize, yWindowSize, btn, yBtn, xBtn;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
   MSG msg;
   HACCEL hAccelTable;

   // Initialize global strings
   LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
   LoadString(hInstance, IDC_HEARDAKE, szWindowClass, MAX_LOADSTRING);
   MyRegisterClass(hInstance);

   // Perform application initialization:
   if (!InitInstance (hInstance, nCmdShow))
   {
      return FALSE;
   }

   hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_HEARDAKE);

   // Main message loop:
   while (GetMessage(&msg, NULL, 0, 0))
   {
      if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
   }

   return (int) msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
   WNDCLASSEX wcex;

   wcex.cbSize = sizeof(WNDCLASSEX);

   wcex.style         = CS_HREDRAW | CS_VREDRAW;
   wcex.lpfnWndProc   = (WNDPROC)WndProc;
   wcex.cbClsExtra      = 0;
   wcex.cbWndExtra      = 0;
   wcex.hInstance      = hInstance;
   wcex.hIcon         = LoadIcon(hInstance, (LPCTSTR)IDI_HEARDAKE);
   wcex.hCursor      = LoadCursor(NULL, IDC_ARROW);
   wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW+1);
   wcex.lpszMenuName   = (LPCTSTR)IDC_HEARDAKE;
   wcex.lpszClassName   = szWindowClass;
   wcex.hIconSm      = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

   return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable
   hWnd = CreateWindow(szWindowClass, "Обмозгуй !", WS_OVERLAPPEDWINDOW,
      300, 300, 168, 215, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND   - process the application menu
//  WM_PAINT   - Paint the main window
//  WM_DESTROY   - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   int wmId, wmEvent;
   PAINTSTRUCT ps;
   HDC hdc;

   switch (message)
   {
   case WM_SIZE:
      xWindowSize = LOWORD(lParam);
      yWindowSize = HIWORD(lParam);
      xBtn -= xWindowSize/4;
      yBtn -= yWindowSize/4;
      btn = 0;
      for(int i = 0; i < 4; i++)
      {
         yBtn+=yWindowSize/4;
         for (int j = 0; j < 4; j++)
         {
            xBtn+=xWindowSize/4;
            if (!(btn==15)){break;}
            SetWindowPos(MyBtn[btn],NULL,xBtn,yBtn,xWindowSize/4,yWindowSize/4, SWP_NOSIZE | SWP_NOMOVE);
                            btn++;
         }
      }
      break;
   case WM_CREATE:
      MyCreate(hWnd);//creating the children buttons.
   case WM_COMMAND:
      wmId    = LOWORD(wParam);
      wmEvent = HIWORD(wParam);
      // Parse the menu selections:
      switch (wmId)
      {
      case IDM_ABOUT:
         DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
         break;
      case IDM_EXIT:
         DestroyWindow(hWnd);
         break;
      default:
         return DefWindowProc(hWnd, message, wParam, lParam);
      }
      break;
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      // TODO: Add any drawing code here...
      EndPaint(hWnd, &ps);
      break;
   case WM_DESTROY:
      PostQuitMessage(0);
      break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

// Message handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
   switch (message)
   {
   case WM_INITDIALOG:
      return TRUE;

   case WM_COMMAND:
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
      {
         EndDialog(hDlg, LOWORD(wParam));
         return TRUE;
      }
      break;
   }
   return FALSE;
}
void MyCreate(HWND hWnd)
{

MyBtn[0] = CreateWindow("BUTTON","1",WS_CHILD|WS_VISIBLE|WS_BORDER,
0,0,40,40,hWnd,NULL,hInst,NULL);

MyBtn[1] = CreateWindow("BUTTON","2",WS_CHILD|WS_VISIBLE|WS_BORDER,
40,0,40,40,hWnd,NULL,hInst,NULL);

MyBtn[2] = CreateWindow("BUTTON","3",WS_CHILD|WS_VISIBLE|WS_BORDER,
80,0,40,40,hWnd,NULL,hInst,NULL);

MyBtn[3] = CreateWindow("BUTTON","4",WS_CHILD|WS_VISIBLE|WS_BORDER,
120,0,40,40,hWnd,NULL,hInst,NULL);

MyBtn[4] = CreateWindow("BUTTON","5",WS_CHILD|WS_VISIBLE|WS_BORDER,
0,40,40,40,hWnd,NULL,hInst,NULL);

MyBtn[5] = CreateWindow("BUTTON","6",WS_CHILD|WS_VISIBLE|WS_BORDER,
40,40,40,40,hWnd,NULL,hInst,NULL);

MyBtn[6] = CreateWindow("BUTTON","7",WS_CHILD|WS_VISIBLE|WS_BORDER,
80,40,40,40,hWnd,NULL,hInst,NULL);

MyBtn[7] = CreateWindow("BUTTON","8",WS_CHILD|WS_VISIBLE|WS_BORDER,
120,40,40,40,hWnd,NULL,hInst,NULL);

MyBtn[8] = CreateWindow("BUTTON","9",WS_CHILD|WS_VISIBLE|WS_BORDER,
0,80,40,40,hWnd,NULL,hInst,NULL);

MyBtn[9] = CreateWindow("BUTTON","10",WS_CHILD|WS_VISIBLE|WS_BORDER,
40,80,40,40,hWnd,NULL,hInst,NULL);

MyBtn[10] = CreateWindow("BUTTON","11",WS_CHILD|WS_VISIBLE|WS_BORDER,
80,80,40,40,hWnd,NULL,hInst,NULL);

MyBtn[11] = CreateWindow("BUTTON","12",WS_CHILD|WS_VISIBLE|WS_BORDER,
120,80,40,40,hWnd,NULL,hInst,NULL);

MyBtn[12] = CreateWindow("BUTTON","13",WS_CHILD|WS_VISIBLE|WS_BORDER,
0,120,40,40,hWnd,NULL,hInst,NULL);

MyBtn[13] = CreateWindow("BUTTON","14",WS_CHILD|WS_VISIBLE|WS_BORDER,
40,120,40,40,hWnd,NULL,hInst,NULL);

MyBtn[14] = CreateWindow("BUTTON","15",WS_CHILD|WS_VISIBLE|WS_BORDER,
80,120,40,40,hWnd,NULL,hInst,NULL);

}

Возможно это из-за того, что сообшение послано в WM_SIZE (но по-мему это то, что надо).
« Последнее редактирование: 20-12-2007 19:19 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 03-01-2005 10:19 » 

я не пойму чего-то... зачем создавать каждый раз кнопки? - создать можно один раз, с произвольными размерами, а при показе и перемещении/изменении размера окна - менять размеры кнопок по заданному тобой закону - к примеру, кнопка "1" должна занять левый верхний угол и быть высотой 100. и так далее ИМХО
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 03-01-2005 10:21 » 

и при этом неважно, что я говорю об MFC а ты API - принцип один
Записан

New_Pi
Гость
« Ответ #11 : 03-01-2005 10:30 » 

я не пойму чего-то... зачем создавать каждый раз кнопки? - создать можно один раз, с произвольными размерами, а при показе и перемещении/изменении размера окна - менять размеры кнопок по заданному тобой закону - к примеру, кнопка "1" должна занять левый верхний угол и быть высотой 100. и так далее ИМХО

По - моему я так и делаю - один раз создаю, а потом "пытаюсь" поменять размеры.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 03-01-2005 11:29 » 

1)
а вот здесь:
Код:
case WM_CREATE: 
      MyCreate(hWnd);//creating the children buttons.
   case WM_COMMAND:
не пропущено break ?

2)
SetWindowPos(MyBtn[btn],NULL,xBtn,yBtn,xWindowSize/4,yWindowSize/4, SWP_NOSIZE | SWP_NOMOVE);

может нужно
SetWindowPos(MyBtn[btn],NULL,xBtn,yBtn,xWindowSize/4,yWindowSize/4, 0);
?

3)
всё таки попробуй
BOOL CWnd::GetWindowPlacement(WINDOWPLACEMENT* lpwndpl) const;

у меня оно работает
Записан

New_Pi
Гость
« Ответ #13 : 03-01-2005 15:22 » 

Вот решение:
case WM_SIZE:
      if(wParam == SIZE_RESTORED|SIZE_MAXIMIZED)
      {
      xBtn = 0;
      yBtn = 0;
      xWindowSize = LOWORD(lParam);
      yWindowSize = HIWORD(lParam);
      xBtn -= xWindowSize/4;
      yBtn -= yWindowSize/4;
      btn = 0;
      for( int i = 0; i < 15; i++)
      {
         SetWindowPos(MyBtn, NULL, 0, 0, xWindowSize/4, yWindowSize/4, SWP_NOMOVE);
      }
      
      for(int i = 0; i < 4; i++)
      {
         yBtn+=yWindowSize/4;
         for (int j = 0; j < 4; j++)
         {
            xBtn+=xWindowSize/4;
            if (btn==15){break;}
            SetWindowPos(MyBtn[btn],NULL,xBtn,yBtn,0,0, SWP_NOSIZE);
            btn++;
         }
         xBtn = 0;
         xBtn -= xWindowSize/4;
      }
      }
      break;

Ошибка была в этом if {!}(btn==15){break;}

Спасибо всем за помошь !
Ждите вопросов ещё   Ха-ха-ха
Записан
tishka17
Участник

ru
Offline Offline
Не разбрасывайте мусор


« Ответ #14 : 17-05-2005 04:57 » 

Ты написал:
   SetWindowPos(MyBtn[btn],NULL,xBtn,yBtn,xWindowSize/4,yWindowSize/4, SWP_NOSIZE | SWP_NOMOVE);
Пиши или SWP_NOSIZE или SWP_NOMOVE, но не вместе.
Записан

//1001101010110100010100110011101111000010110111010101110011
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 17-04-2006 22:01 » new

(комент)

имхо тема для удаления. Нужны ещё мнения
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines