Что такое код getsystemmetrics

Почему GetSystemMetrics() возвращает эти значения?

У меня возникли проблемы с созданием клиентской области заданного размера. AdjustWindowRect() не будет работать должным образом, поэтому я решил попробовать вручную вычислить ширину и высоту окна.

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

Я уверен, что границы моего окна не такие тонкие. Что я делаю неправильно?

Вначале мое окно использовало стиль WS_OVERLAPPED. Поскольку параметр AdjustWindowRect не позволяет использовать этот стиль рядом с ним, я создал тот же тип окна, в котором я хотел: (WS_BORDER | WS_CAPTION | WS_SYSMENU). Это тот же стиль, который я использую во время вызова AdjustWindowRect и AdjustWindowRectEx (этот с NULL как расширенный стиль, поскольку я не использую его). Это дает мне правильную ширину, но высота не хватает нескольких пикселей.

Это дает мне клиентскую область шириной 800 пикселей, но только 582 пикселей в высоту.

CURIOUS, я использовал GetClientRect(); и это дало мне, что ширина 800 и высота IS 600. Как получилось, что она не отображается правильно?

Кажется, что когда я нарисовал все окно, все это замерло. Причина? Я не знаю.

Возможно, кто-то еще может пролить свет на это.

Первая проблема заключается в том, что вы используете неправильную метрику. Вам нужно будет использовать SM_CXSIZEFRAME, чтобы получить ширину изменяемой границы.

Вторая проблема заключается в том, что Windows не даст вам правильного значения. Жирные границы окна на Aero — серьезная проблема апплета. Windows намеренно лежит вокруг прямоугольника окна и размера границы. Чтобы старые программы работали корректно, они задают размер окна в вызове CreateWindow(). Но это размер рамки, включая границы. Без лжи окно в итоге окажется слишком маленьким.

Чтобы отключить ложь, вы должны сообщить Windows о том, что вы знаете о поведении Aero и не нуждаетесь во лжи. Project + Properties, Linker, Command Line, Дополнительные опции и добавьте:

Версия 6.0 — это номер версии Vista, первая версия Windows с Aero. Помните, что ваша программа больше не будет работать на XP, когда вы это сделаете.

Проблемы с GetSystemMetrics

Есть приложение на DirectX, которое работает как в полноэкранном, так и в оконном режиме.

ЗАДАЧА — в случае, если пользователь нажимает Alt-Enter, находясь в полноэкранном режиме и, если настройки разрешения на рабочем столе 1024 на 768 и ниже, не дать ему перейти в оконный режим и выдать при этом соответственное сообщение. При этом, естественно, нужно отслеживать ситуацию, когда пользователь свернул окно, поменял разрешение на более низкое и вернулся, и, в случае необходимости, переключать приложение из оконного режима в полноэкранный.

РЕШЕНИЕ — при получении фокуса приложением проверяем разрешение через GetSystemMetrics и предпринимаем соответствующие действия в зависимости от полученных результатов.

ПРОБЛЕМА — этот подход не срабатывает при следующих условиях:

1) В настройках монитора стоит разрешение 1280 на 1024
2) Включаем приложение в полноэкранном режиме
3) Нажимаем Win-L
4) Разлочиваем
5) Нажимаем Alt-Enter
6) GetSystemMetrics возвращает в качестве текущего разрешение экрана 1024 на 768 и, соответственно, не разрешает переключиться в оконный режим

ЗАМЕЧАНИЕ — если переключиться после указанных действий на рабочий стол через Alt-Tab и вернуться в приложение, то при попытке перейти в оконный режим GetSystemMetrics уже возвращает правильные 1280 на 1024.

ВОПРОС — есть ли возможность каким-либо образом получить 1280 на 1024, на которые рабочий стол переключается по Alt-Tab и вообще, что вам кажется неправильным в описанном решении?

Что такое код getsystemmetrics

Возвращает ли функция GetSystemMetrics клиентские размеры окна?

The GetSystemMetrics function retrieves various system metrics and system configuration settings.

System metrics are the dimensions (widths and heights) of Windows display elements. All dimensions retrieved by GetSystemMetrics are in pixels.

int nIndex // system metric or configuration setting to retrieve
);

Specifies the system metric or configuration setting to retrieve. All SM_CX* values are widths. All SM_CY* values are heights. The following values are defined:

Value Meaning
SM_ARRANGE Flags specifying how the system arranged minimized windows. For more information about minimized windows, see the following Remarks section.
SM_CLEANBOOT Value that specifies how the system was started:0 Normal boot1 Fail-safe boot2 Fail-safe with network bootFail-safe boot (also called SafeBoot) bypasses the user»s startup files.
SM_CMOUSEBUTTONS Number of buttons on mouse, or zero if no mouse is installed.
SM_CXBORDER,
SM_CYBORDER The width and height, in pixels, of a window border. This is equivalent to the SM_CXEDGE value for windows with the 3-D look.
SM_CXCURSOR,
SM_CYCURSOR Width and height, in pixels, of a cursor. These are the cursor dimensions supported by the current display driver. The system cannot create cursors of other sizes.
SM_CXDLGFRAME,
SM_CYDLGFRAME Same as SM_CXFIXEDFRAME and SM_CYFIXEDFRAME.
SM_CXDOUBLECLK,
SM_CYDOUBLECLK Width and height, in pixels, of the rectangle around the location of a first click in a double-click sequence. The second click must occur within this rectangle for the system to consider the two clicks a double-click. (The two clicks must also occur within a specified time.)
SM_CXDRAG,
SM_CYDRAG Width and height, in pixels, of a rectangle centered on a drag point to allow for limited movement of the mouse pointer before a drag operation begins. This allows the user to click and release the mouse button easily without unintentionally starting a drag operation.
SM_CXEDGE,
SM_CYEDGE Dimensions, in pixels, of a 3-D border. These are the 3-D counterparts of SM_CXBORDER and SM_CYBORDER.
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME Thickness, in pixels, of the frame around the perimeter of a window that has a caption but is not sizable. SM_CXFIXEDFRAME is the width of the horizontal border and SM_CYFIXEDFRAME is the height of the vertical border. Same as SM_CXDLGFRAME and SM_CYDLGFRAME.
SM_CXFRAME,
SM_CYFRAME Same as SM_CXSIZEFRAME and SM_CYSIZEFRAME.
SM_CXFULLSCREEN, SM_CYFULLSCREEN Width and height of the client area for a full-screen window. To get the coordinates of the portion of the screen not obscured by the tray, call the SystemParametersInfo function with the SPI_GETWORKAREA value.
SM_CXHSCROLL, SM_CYHSCROLL Width, in pixels, of the arrow bitmap on a horizontal scroll bar; and height, in pixels, of a horizontal scroll bar.
SM_CXHTHUMB Width, in pixels, of the thumb box in a horizontal scroll bar.
SM_CXICON,
SM_CYICON The default width and height, in pixels, of an icon. These values are typically 32×32, but can vary depending on the installed display hardware.The LoadIcon function can only load icons of these dimensions.
SM_CXICONSPACING, SM_CYICONSPACING Dimensions, in pixels, of a grid cell for items in large icon view. Each item fits into a rectangle of this size when arranged. These values are always greater than or equal to SM_CXICON and SM_CYICON.
SM_CXMAXIMIZED,
SM_CYMAXIMIZED Default dimensions, in pixels, of a maximized top-level window.
SM_CXMAXTRACK,
SM_CYMAXTRACK Default maximum dimensions, in pixels, of a window that has a caption and sizing borders. The user cannot drag the window frame to a size larger than these dimensions. A window can override these values by processing the WM_GETMINMAXINFO message.
SM_CXMENUCHECK,
SM_CYMENUCHECK Dimensions, in pixels, of the default menu check-mark bitmap.
SM_CXMENUSIZE,
SM_CYMENUSIZE Dimensions, in pixels, of menu bar buttons, such as multiple document (MIDI) child close.

SM_CXMIN,
SM_CYMIN Minimum width and height, in pixels, of a window.
SM_CXMINIMIZED,
SM_CYMINIMIZED Dimensions, in pixels, of a normal minimized window.
SM_CXMINSPACING
SM_CYMINSPACING Dimensions, in pixels, of a grid cell for minimized windows. Each minimized window fits into a rectangle this size when arranged. These values are always greater than or equal to SM_CXMINIMIZED and SM_CYMINIMIZED.
SM_CXMINTRACK, SM_CYMINTRACK Minimum tracking width and height, in pixels, of a window. The user cannot drag the window frame to a size smaller than these dimensions. A window can override these values by processing the WM_GETMINMAXINFO message.
SM_CXSCREEN,
SM_CYSCREEN Width and height, in pixels, of the screen.
SM_CXSIZE,
SM_CYSIZE Width and height, in pixels, of a button in a window»s caption or title bar.
SM_CXSIZEFRAME,
SM_CYSIZEFRAME Thickness, in pixels, of the sizing border around the perimeter of a window that can be resized. SM_CXSIZEFRAME is the width of the horizontal border and SM_CYSIZEFRAME is the height of the vertical border. Same as SM_CXFRAME and SM_CYFRAME.
SM_CXSMICON,
SM_CYSMICON Recommended dimensions, in pixels, of a small icon. Small icons typically appear in window captions and in small icon view.
SM_CXSMSIZE
SM_CYSMSIZE Dimensions, in pixels, of small caption buttons.
SM_CXVSCROLL, SM_CYVSCROLL Width, in pixels, of a vertical scroll bar; and height, in pixels, of the arrow bitmap on a vertical scroll bar.
SM_CYCAPTION Height, in pixels, of normal caption area.
SM_CYKANJIWINDOW For double-byte character set versions of Windows, height, in pixels, of the Kanji window at the bottom of the screen.
SM_CYMENU Height, in pixels, of single-line menu bar.
SM_CYSMCAPTION Height, in pixels, of a small caption.
SM_CYVTHUMB Height , in pixels, of the thumb box in a vertical scroll bar.
SM_DBCSENABLED TRUE or nonzero if the double-byte character set (DBCS) version of USER.EXE is installed; FALSE, or zero otherwise.
SM_DEBUG TRUE or nonzero if the debugging version of USER.EXE is installed; FALSE, or zero, otherwise.
SM_MENUDROPALIGNMENT TRUE, or nonzero if drop-down menus are right-aligned relative to the corresponding menu-bar item; FALSE, or zero if they are left-aligned.
SM_MIDEASTENABLED TRUE if the system is enabled for Hebrew/Arabic languages.
SM_MOUSEPRESENT TRUE or nonzero if a mouse is installed; FALSE, or zero, otherwise.
SM_MOUSEWHEELPRESENT Windows NT only: TRUE or nonzero if a mouse with a wheel is installed; FALSE, or zero, otherwise.
SM_NETWORK The least significant bit is set if a network is present; otherwise, it is cleared. The other bits are reserved for future use.
SM_PENWINDOWS TRUE or nonzero if the Microsoft Windows for Pen computing extensions are installed; zero, or FALSE, otherwise.
SM_SECURE TRUE if security is present, FALSE otherwise.
SM_SHOWSOUNDS TRUE or nonzero if the user requires an application to present information visually in situations where it would otherwise present the information only in audible form; FALSE, or zero, otherwise.
SM_SLOWMACHINE TRUE if the computer has a low-end (slow) processor, FALSE otherwise.
SM_SWAPBUTTON TRUE or nonzero if the meanings of the left and right mouse buttons are swapped; FALSE, or zero, otherwise.

Илон Маск рекомендует:  Что такое код set tarnsaction

If the function succeeds, the return value is the requested system metric or configuration setting.
If the function fails, the return value is zero. GetLastError does not provide extended error information.

System metrics may vary from display to display.
The SM_ARRANGE setting specifies how the system arranges minimized windows, and consists of a starting position and a direction. The starting position can be one of the following values.

Value Meaning
ARW_BOTTOMLEFT Start at lower-left corner of screen (default position).
ARW_BOTTOMRIGHT Start at lower-right corner of screen. Equivalent to ARW_STARTRIGHT.
ARW_HIDE Hide minimized windows by moving them off of the visible area of the screen.
ARW_TOPLEFT Start at upper-left corner of screen. Equivalent to ARV_STARTTOP.
ARW_TOPRIGHT Start at upper-right corner of screen. Equivalent to ARW_STARTTOP | SRW_STARTRIGHT.

The direction in which to arrange can be one of the following values.

Value Meaning
ARW_DOWN Arrange vertically, top to bottom.
ARW_LEFT Arrange horizontally, left to right.
ARW_RIGHT Arrange horizontally, right to left.
ARW_UP Arrange vertically, bottom to top.

А я все думал, как получить доступ к справке в отсутствии Delphi ?
Так Ega23 же есть !


> А я все думал, как получить доступ к справке в отсутствии
> Delphi ?
> Так Ega23 же есть !

Если чё, то я также выдаю справки по TSQL, PLPGSQL и .
Не, больше, вроде, не выдаю.

если че, я могу справку по пхп выдать


> Ega23 © (29.12.08 17:39) [4]

> Если чё, то я также выдаю справки


> clickmaker © (29.12.08 17:50) [5]

> если че, я могу справку по пхп выдать

Эт чё, за взятки, чтоль?
Ну, и мы так могем ;)

А во-ще, это все — пиар.

> Эт чё, за взятки, чтоль?

можно и за коньяк )


> clickmaker © (29.12.08 18:36) [7]

> можно и за коньяк )

А Виктория Алексанровна, это чего — не Вика? [ДВ]

— Tеплую водку, в туалете, из мыльницы? .. Ну.. наливай!


> clickmaker © (29.12.08 18:36) [7]
> > Эт чё, за взятки, чтоль?
>
> можно и за коньяк )

Коньяк есть у меня. Вот только пхп — мне не нужен. :)

1. Даже и без справки, а только исходя из названия можно предположить, что GetSystemMetrics возвращает ОБЩЕСИСТЕМНЫЕ метрики, а не метрики отдельных окон.

2. Даже и не читая справку, а только заглянув в нее можно увидеть, что GetSystemMetrics имеет единственный параметр (индекс метрики) и этот параметр никакое окно не идентифицирует — значит, предположение верно.

> [9] Германн © (30.12.08 01:09)

щас покопаюсь.
вот, могу еще выдать справку по MySql 4
так уж и быть: за MySql 4 — 4-звездный коньяк


> Возвращает ли функция GetSystemMetrics клиентские размеры
> окна?

Склад программиста. C C++ Pascal Java и Assembler Исходники

Паскаль исходники. Паскаль программы. Pascal исходники. Pascal программы. С программы исходники. Исходники ассемблер. Ассемблер задачи. Си программы. Исходники Паскаль. Исходники C. Исходники Си. Си программы. Си исходники. Си задачи. Паскаль задачи. Задачи на паскале. Задачи по паскале. Решить задачу по паскалю. Бесплатные исходники. Скачать бесплатно исходники. Бесплатные программы. Исходники C++, исходники СИ++. Скачать бесплатно исходники. Исходники бесплатно. Java исходники. Java классы.

Крючок для функции API GetSystemMetrics

Пожалуйста, помогите мне создать крюк для функции GetSystemMetrics AP.I. Я хочу, что, когда некоторые приложения (например, calc.exe) называют GetSystemMetrics они получают свое значение (например, 500×500) и другие приложения получить правильный размер экрана. И если кто-нибудь может сказать мне, как я могу сделать это использовать C # и .NET CF 2.0 Я буду очень рад.

Спасибо и надеюсь, вам помогут.

Я не думаю , что это можно сделать в C # /. NET без написания собственного кода. Тем не менее, хорошая новость заключается в том, что есть замечательная библиотека называется madCodeHook , которая очень проста в использовании. Посмотрите на http://madshi.net/

Вы не можете сделать это, даже в родном коде (по крайней мере, не уродливый, обливание идеи, виртуальные таблицы писак памяти / ядра, которые могут или не могут продолжать работать в разных версиях ОС). GetSystemMetrics вызовы вниз к ОС, чтобы получить информацию о платформе. Там нет никакого способа, короткие перекомпиляции ОС и изменять эти значения, что вы можете «переопределить» thse значения и получить операционную систему, чтобы сообщить другие номера (если, конечно, операционная система не была уже построена таким образом, что эти цифры пришли из где-то ваше приложение может изменить — как в реестре).

РЕДАКТИРОВАТЬ

На основании ваших комментариев, фактическая проблема заключается в том, что вы пытаетесь создать некоторую форму «панель задач» типа приложения, и вы хотели бы другие приложения за пределами вашего контроля не перекрывать панели задач, когда они максимизируют. Это именно то, как работает панель задач Explorer, существующее место, поэтому мое предложение пойти посмотреть в исходном коде оболочки по умолчанию и посмотреть, как это достигается там.

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

ВИДЕОКУРС
выпущен 4 ноября!

Описание:
function GetSystemMetrics(Index: Integer): Integer;

Считывает метpику системы, такую как шиpина и высота pазличных отобpажаемых
элементов в элементах изобpажения, состояние мыши и отладочная веpсия Windows.

Паpаметpы:
Index: Одна из констант sm_. См. pаздел «Коды системных метpик, sm_» в главе 1.

Возвpащаемое значение:
Запpошенное значение системной метpики.

См. также: AppendMenu, InsertMenu, ModifyMenu

Что такое код getsystemmetrics

Возвращает определённую системную метрику или системную конфигурационную настройку

#include
_WinAPI_GetSystemMetrics ( $iIndex )

$iIndex Индекс системной метрики или системной конфигурационной настройки
Успех: Возвращает системную метрику
Ошибка: Возвращает 0
Имя Индекс Возвращаемое значение
SMCYCAPTION 4 Высота заголовка окна
SMCXFRAME 32 Ширина рамки для окна, размеры которого можно изменять
SMCYFRAME 33 Высота рамки для окна, размеры которого можно изменять
SMCXSCREEN Ширина экрана
SMCYSCREEN 1 Высота экрана
SMSWAPBUTTON 23 Если 1, то действия левой и правой кнопки мыши поменяны местами, иначе 0.

Искать GetSystemMetrics в библиотеке MSDN

Global $aConst [ 87 ] = [ _
‘SM_CXSCREEN’ , _
‘SM_CYSCREEN’ , _
‘SM_CXVSCROLL’ , _
‘SM_CYHSCROLL’ , _
‘SM_CYCAPTION’ , _
‘SM_CXBORDER’ , _
‘SM_CYBORDER’ , _
‘SM_CXDLGFRAME’ , _
‘SM_CYDLGFRAME’ , _
‘SM_CYVTHUMB’ , _
‘SM_CXHTHUMB’ , _
‘SM_CXICON’ , _
‘SM_CYICON’ , _
‘SM_CXCURSOR’ , _
‘SM_CYCURSOR’ , _
‘SM_CYMENU’ , _
‘SM_CXFULLSCREEN’ , _
‘SM_CYFULLSCREEN’ , _
‘SM_CYKANJIWINDOW’ , _
‘SM_MOUSEPRESENT’ , _
‘SM_CYVSCROLL’ , _
‘SM_CXHSCROLL’ , _
‘SM_DEBUG’ , _
‘SM_SWAPBUTTON’ , _
‘SM_RESERVED1’ , _
‘SM_RESERVED2’ , _
‘SM_RESERVED3’ , _
‘SM_RESERVED4’ , _
‘SM_CXMIN’ , _
‘SM_CYMIN’ , _
‘SM_CXSIZE’ , _
‘SM_CYSIZE’ , _
‘SM_CXFRAME’ , _
‘SM_CYFRAME’ , _
‘SM_CXMINTRACK’ , _
‘SM_CYMINTRACK’ , _
‘SM_CXDOUBLECLK’ , _
‘SM_CYDOUBLECLK’ , _
‘SM_CXICONSPACING’ , _
‘SM_CYICONSPACING’ , _
‘SM_MENUDROPALIGNMENT’ , _
‘SM_PENWINDOWS’ , _
‘SM_DBCSENABLED’ , _
‘SM_CMOUSEBUTTONS’ , _
‘SM_SECURE’ , _
‘SM_CXEDGE’ , _
‘SM_CYEDGE’ , _
‘SM_CXMINSPACING’ , _
‘SM_CYMINSPACING’ , _
‘SM_CXSMICON’ , _
‘SM_CYSMICON’ , _
‘SM_CYSMCAPTION’ , _
‘SM_CXSMSIZE’ , _
‘SM_CYSMSIZE’ , _
‘SM_CXMENUSIZE’ , _
‘SM_CYMENUSIZE’ , _
‘SM_ARRANGE’ , _
‘SM_CXMINIMIZED’ , _
‘SM_CYMINIMIZED’ , _
‘SM_CXMAXTRACK’ , _
‘SM_CYMAXTRACK’ , _
‘SM_CXMAXIMIZED’ , _
‘SM_CYMAXIMIZED’ , _
‘SM_NETWORK’ , _
‘SM_CLEANBOOT’ , _
‘SM_CXDRAG’ , _
‘SM_CYDRAG’ , _
‘SM_SHOWSOUNDS’ , _
‘SM_CXMENUCHECK’ , _
‘SM_CYMENUCHECK’ , _
‘SM_SLOWMACHINE’ , _
‘SM_MIDEASTENABLED’ , _
‘SM_MOUSEWHEELPRESENT’ , _
‘SM_XVIRTUALSCREEN’ , _
‘SM_YVIRTUALSCREEN’ , _
‘SM_CXVIRTUALSCREEN’ , _
‘SM_CYVIRTUALSCREEN’ , _
‘SM_CMONITORS’ , _
‘SM_SAMEDISPLAYFORMAT’ , _
‘SM_IMMENABLED’ , _
‘SM_CXFOCUSBORDER’ , _
‘SM_CYFOCUSBORDER’ , _
‘SM_TABLETPC’ , _
‘SM_MEDIACENTER’ , _
‘SM_STARTER’ , _
‘SM_SERVERR2’ , _
‘SM_CMETRICS’ ]

_Example () ; сортировка по константе
_ArraySort ( $aConst )
_Example () ; сортировка по алфавиту

Func _Example ()
$a = UBound ( $aConst )
Local $sRes [ $a ][ 3 ]
For $i = 0 To $a — 1
$n = Eval ( $aConst [ $i ])
$sRes [ $i ][ 0 ]= $aConst [ $i ]
$sRes [ $i ][ 1 ]= $n
$sRes [ $i ][ 2 ]= _WinAPI_GetSystemMetrics ( $n )
Next
_ArrayDisplay ( $sRes , ‘Результат’ , — 1 , 0 , » , ‘|’ , ‘ix|Имя|№|Значение’ )
EndFunc

Операционная система Microsoft Windows 3.1 для программиста

4. Метрики Windows

В программном интерфейсе Windows имеются функции, позволяющие получить информацию о размерах отдельных компонент Windows, таких, как ширина рамки окна, ширина и высота экрана, размеры шрифта и т. п. Эта информация необходима для определения габаритов и расположения создаваемых вами окон и других изображений.

В приложении WSTYLE мы указывали абсолютные значения координат и размеров создаваемых окон. Однако Windows может работать в режимах с различным разрешением видеоадаптера. Если вы подберете все размеры для разрешения 640 х 480 точек, в режиме 1200 х 1024 все ваше изображение окажется в верхнем левом углу экрана и вам придется напрягать зрение для того, чтобы что-нибудь рассмотреть. Было бы логичнее определять размеры и расположение создаваемых окон исходя из общего размера экрана, определяя последние динамически при работе приложения.

4.1. Системные метрики

Метрики системных компонент Windows можно определить при помощи функции GetSystemMetrics, имеющей следующий прототип:

Единственный параметр функции (nIndex) выбирает параметр, значение которого необходимо определить. Значение параметра возвращается функцией GetSystemMetrics.

Для определения компоненты Windows в файле windows.h имеются символические константы с префиксом SM_:

Имя константы Описание
SM_CXBORDER Ширина рамки для окна, размеры которого нельзя изменять
SM_CXCURSOR Ширина курсора
SM_CXDLGFRAME Ширина рамки окна, имеющего стиль WS_DLGFRAME
SM_CXDOUBLECLK Ширина прямоугольника, внутри которого должны быть сделаны два щелчка мышью, для того чтобы они могли распознаваться как один двойной щелчок (double click). Эта константа определена только для Windows версии 3.1
SM_CXFRAME Ширина рамки для окна, размеры которого можно изменять
SM_CXFULLSCREEN Ширина внутренней поверхности окна, увеличенного до предела (maximised)
SM_CXHSCROLL Ширина битового образа стрелки горизонтальной полосы просмотра
SM_CXHTHUMB Ширина ползунка горизонтальной полосы просмотра
SM_CXICON Ширина пиктограммы
SM_CXICONSPACING Ширина прямоугольника, используемого для расположения пиктограммы с заголовком. Эта константа определена только для Windows версии 3.1
SM_CXMIN Минимальная ширина окна
SM_CXMINTRACK Минимальная ширина окна, которая может быть установлена при помощи мыши (Minimum tracking width of a window)
SM_CXSCREEN Ширина экрана
SM_CXSIZE Ширина полосы битового образа (bitmap) заголовка окна (title bar)
SM_CXVSCROLL Ширина битового образа стрелки вертикальной полосы просмотра
SM_CYBORDER Высота рамки для окна, размеры которого нельзя изменять
SM_CYCAPTION Высота заголовка окна
SM_CYCURSOR Высота курсора
SM_CYDLGFRAME Высота рамки окна, имеющего стиль WS_DLGFRAME
SM_CYDOUBLECLK Высота прямоугольника, внутри которого должны быть сделаны два щелчка мышью, для того чтобы они могли распознаваться как один двойной щелчок (double click). Эта константа определена только для Windows версии 3.1
SM_CYFRAME Высота рамки для окна, размеры которого можно изменять
SM_CYFULLSCREEN Высота внутренней поверхности окна, увеличенного до предела (maximised)
SM_CYHSCROLL Высота битового образа стрелки горизонтальной полосы просмотра
SM_CYICON Высота пиктограммы
SM_CYICONSPACING Высота прямоугольника, используемого для расположения пиктограммы с заголовком. Эта константа определена только для Windows версии 3.1
SM_CYKANJIWINDOW Высота окна Kanji
SM_CYMENU Высота одной строки в полосе меню
SM_CYMIN Минимальная высота окна
SM_CYMINTRACK Минимальная высота окна, которая может быть установлена при помощи мыши (Minimum tracking width of a window)
SM_CYSCREEN Высота экрана
SM_CYSIZE Высота полосы битового образа заголовка окна
SM_CYVSCROLL Высота битового образа стрелки вертикальной полосы просмотра
SM_CYVTHUMB Высота ползунка горизонтальной полосы просмотра
SM_DBCSENABLED Флаг использования символов, состоящих из двух байт (используется в тех языках, где для представления всех символов не хватает 8-разрядной сетки). Эта константа определена только для Windows версии 3.1
SM_DEBUG Флаг отладочной версии Windows. Он не равен нулю, если работает отладочная версия Windows (поставляется вместе с Microsoft SDK или Microsoft Visual C++)
SM_MENUDROPALIGNMENT Флаг типа выравнивания временного меню (pop-up menu). Если флаг равен нулю, левая сторона меню выравнена по левой стороне соответствующего элемента строки меню. В противном случае левая сторона меню выравнена по правой стороне соответствующего элемента строки меню. Эта константа определена только для Windows версии 3.1
SM_MOUSEPRESENT Флаг не равен нулю, если компьютер оборудован мышью
SM_PENWINDOWS Идентификатор библиотеки динамической загрузки DLL Pen Windows или 0, если Pen Windows не используется. Эта константа определена только для Windows версии 3.1
SM_RESERVED1 Зарезервировано
SM_RESERVED2 Зарезервировано
SM_RESERVED3 Зарезервировано
SM_RESERVED4 Зарезервировано
SM_SWAPBUTTON Если флаг не равен нулю, действия левой и правой клавиши мыши поменялись местами, то есть вместо левой клавиши используется правая и наоборот, вместо правой — левая
Илон Маск рекомендует:  Что такое код asp logextfileuriquery

4.2. Приложение SMETRICS

Наше следующее приложение представляет собой пример простейшей программы для Windows, не создающей главного окна, не обрабатывающей сообщения, но тем не менее выполняющей некоторую полезную работу.

Задача приложения SMETRICS заключается в вызове функции GetSystemMetrics для всех возможных параметров, перечисленных в предыдущем разделе. Исходный текст приложения представлен в листинге 4.1.

Листинг 4.1. Файл smetrics\smetrics.cpp

В приложении SMETRICS определен массив структур SMTable, в котором для каждой константы хранится ее символическое имя в виде текстовой строки.

Алгоритм работы понятен без дополнительных объяснений. Заметим только, что мы впервые в приложении Windows использовали функции для работы с файлами. Возможно, мы вас немного порадуем, сообщив, что для работы с файлами вы по- прежнему можете использовать хорошо знакомые вам из MS-DOS функции потокового ввода/вывода. Действительно, функции потокового ввода/вывода будут работать в приложениях Windows. Однако лучше использовать специальные функции файлового ввода/вывода, которые мы рассмотрим позже, в одном из следующих томов «Библиотеки системного программиста».

Вы также можете пользоваться известной вам функцией sprintf (но не printf!). Эту функцию мы использовали для формирования текстовой строки.

Исходный текст файла определения модуля представлен в листинге 4.2.

Листинг 4.2. Файл smetrics\smetrics.def

В листинге 4.3 приведен образец выходного файла, полученного при работе приложения при разрешении 640 х 480 точек.

Листинг 4.3. Образец файла sysmet.txt

Общие размеры экрана определяются метриками SM_CXSCREEN и SM_CYSCREEN. В приведенном выше листинге эти значения соответствуют разрешению 640 х 480. Максимальный размер внутренней области окна можно определить из метрик SM_CXFULLSCREEN и SM_CYFULLSCREEN. В нашем случае максимальная ширина внутренней области окна равна максимальной ширине экрана (640), в то время как максимальная высота меньше на высоту заголовка окна. Высота заголовка определяется метрикой SM_CYCAPTION и в нашем случае равна 20.

При разрешении 1024 х 768 метрики SM_CXSCREEN, SM_CYSCREEN, SM_CXFULLSCREEN и SM_CYFULLSCREEN изменили свое значение:

Остальные метрики не изменились и соответствовали значениям для разрешения 640 х 480.

Для того чтобы сделать приложение нечувствительным к используемому разрешению, вы не должны предполагать, что экран видеомонитора имеет какие-либо конкретные размеры. Размеры экрана должны определяться динамически с использованием соответствующих метрик. В этом случае при изменении разрешения размеры всех элементов изображения, нарисованных в окне приложения (и размеры самого окна) будут пересчитаны заново.

Обратите внимание на метрики SM_CXICON и SM_CYICON, определяющие размеры пиктограммы. Эти размеры потребуются вам при необходимости нарисовать в окне пиктограмму. Программный интерфейс Windows имеет специальную функцию DrawIcon, позволяющую нарисовать в окне приложения пиктограмму.

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

4.3. Определение возможностей устройств ввода/вывода

В программном интерфейсе Windows имеется функция GetDeviceCaps, позволяющая по контексту определить возможности и параметры драйвера, обслуживающего устройство ввода/вывода.

Функция GetDeviceCaps имеет следующий прототип:

Первый параметр функции (hdc) задает контекст устройства, для которого необходимо получить информацию о его возможностях. Вы можете, например, указать значение, полученное от функции BeginPaint или GetDC.

Второй параметр (iCapability) определяет параметр устройства, значение которого необходимо получить.

Приведем список возможных значений для второго параметра функции GetDeviceCaps. Все эти значения определены как символьные константы в файле windows.h.

Имя константы Описание
ASPECTX Относительная ширина отдельного пиксела, который используется при рисовании линий
ASPECTXY Относительная длина диагонали отдельного пиксела, который используется при рисовании линий
ASPECTY Относительная высота отдельного пиксела, который используется при рисовании линий
BITSPIXEL Количество бит, используемых для представления цвета в одном пикселе
CLIPCAPS Возможности устройства по ограничению области вывода:
CP_NONE вывод не ограничивается;
CP_RECTANGLE вывод ограничивается прямоугольной областью;CP_REGION вывод ограничивается произвольной областью
COLORRES Цветовое разрешение устройства в битах на пиксел. Это значение можно использовать только для устройств, использующих цветовые палитры, что можно определить при помощи константы RASTERCAPS.
Данную константу можно использовать только для драйверов версии 3.0 и более поздних версий
CURVECAPS Способность устройства рисовать различные кривые линии и геометрические фигуры. Возвращаемое значение представляет собой набор битовых масок, установленных в 1, если устройство может само рисовать различные фигуры:
CC_CIRCLES окружности;
CC_CHORD сегмент эллипса;
CC_ELLIPSES эллипсы;
CC_INTERIORS устройство может закрашивать внутреннюю область геометрических фигур;
CC_NONE устройство не может рисовать кривые линии и геометрические фигуры;
CC_PIE секторы эллипса;
CC_ROUNDRECT прямоугольники со скругленными углами;
CC_STYLED устройство может рисовать рамки с использованием различных стилей (штриховые, пунктирные, штрих-пунктирные и т.д.);
CC_WIDE широкие рамки;
CC_WIDESTYLED устройство может рисовать широкие рамки с использованием различных стилей (штриховые, пунктирные, штрих-пунктирные и т. д.)
DRIVERVERSION Номер версии драйвера устройства. Значение 0x300 соответствует версии 3.0, значение 0x30a — версии 3.1
HORZRES Ширина экрана в пикселах. Для принтеров — ширина рабочей области, в пределах которой может выполняться печать
HORZSIZE Стандартная для данного разрешения ширина дисплея в миллиметрах
LINECAPS Способности устройства рисовать линии. Возвращаемое значение представляет собой набор битовых масок, установленных в 1, если устройство может само рисовать линии различного типа:
LC_INTERIORS устройство может закрашивать внутреннюю область;
LC_MARKER маркеры;
LC_NONE устройство не может рисовать линии;
LC_POLYLINE ломаные линии;
LC_POLYMARKER линии polymarker;
LC_STYLED устройство может рисовать линии с использованием различных стилей (штриховые, пунктирные, штрих пунктирные и т.д.);
LC_WIDE широкие линии;
LC_WIDESTILED устройство может рисовать широкие линии с использованием различных стилей (штриховые, пунктирные, штрих-пунктирные и т. д.)
LOGPIXELSX Количество пикселов на один логический дюйм по горизонтали
LOGPIXELSY Количество пикселов на один логический дюйм по вертикали
NUMBRUSHES Количество кистей, поддерживаемых устройством
NUMCOLORS Количество цветов, зарезервированных Windows для использования в цветовых палитрах устройства, то есть количество чистых цветов, которые может использовать устройство. Для драйверов монохромных устройств возвращается значение 2. Для плоттеров это значение соответствует количеству цветных перьев
NUMFONTS Количество шрифтов, поддерживаемых устройством
NUMMARKERS Количество маркеров, поддерживаемых устройством
NUMPENS Количество перьев, поддерживаемых устройством
NUMRESERVED Количество зарезервированных элементов в системной палитре. Это значение определено только для устройств, использующих цветовые палитры, что можно выяснить при помощи константы RASTERCAPS.
Данную константу можно использовать только для драйверов версии 3.0 и более поздних версий
PDEVICESIZE Размер внутренней структуры данных PDEVICE
PLANES Количество цветовых слоев
POLYGONALCAPS Способности устройства рисовать многоугольники. Возвращаемое значение представляет собой набор битовых масок, установленных в 1, если устройство может само рисовать многоугольники различного типа:
PC_INTERIORS устройство может закрашивать внутреннюю область;
PC_NONE устройство не может рисовать многоугольники;
PC_RECTANGLE прямоугольники;
PC_SCANLINES устройство может выполнять сканирование линий растра;
PC_STYLED устройство может рисовать рамки с использованием различных стилей (штриховые, пунктирные, штрих-пунктирные и т. д.);
PC_WIDE широкие рамки;
PC_WIDESTILED устройство может рисовать широкие рамки с использованием различных стилей (штриховые, пунктирные, штрих-пунктирные и т. д.)
PC_WINDPOLYGON многоугольники с заполнением в режиме WINDING
RASTERCAPS Набор битовых масок, определяющих способность устройства выполнять растровые операции:
RC_BANDING для устройства требуется поддержка операции banding — функции GDI должны выводить данные небольшими сегментами, формирующими изображение (используется устройствами печати);
RC_BIGFONT устройство поддерживает шрифты, размером большем чем 64 Кбайт;
RC_BITBLT устройство может выполнять перемещение участков изображения в виде битовых образов (bitmap);
RC_BITMAP64 устройство может работать с битовыми образами большого размера (больше 64 Кбайт);
RC_DEVBITS есть поддержка битовых образов со стороны устройства;
RC_DI_BITMAP устройство поддерживает выполнение функций SetDIBits и GetDIBits;
RC_DIBTODEV устройство поддерживает выполнение функции SetDIBitsToDevice;
RC_FLOODFILL устройство может выполнять заливку фигур;
RC_GDI20_OUTPUT драйвер устройства поддерживает особенности Windows версии 2.0;
RC_GDI20_STATE контекст устройства содержит блок состояния устройства;
RC_NONE устройство не выполняет растровых операций;
RC_OP_DX_OUTPUT устройство поддерживает режим непрозрачности и массив DX;
RC_PALETTE устройство использует палитры цветов;
RC_SAVEBITMAP устройство может локально сохранять битовые образы (bitmap);
RC_SCALING поддерживается операция масштабирования;
RC_STRETCHBLT устройство поддерживает функцию StretchBlt;
RC_STRETCHDIB устройство поддерживает функцию StretchDIBits
SIZEPALETTE Размер таблицы палитры. Это значение можно использовать только для устройств, использующих цветовые палитры, что можно определить при помощи константы RASTERCAPS
TECHNOLOGY Тип устройства или технология, с использованием которой сделано устройство:
DT_CHARSTREAM устройство работает с потоком символов;
DT_DISPFILE файл отображения;
DT_METAFILE метафайл;
DT_PLOTTER векторный плоттер;
DT_RASDISPLAY растровый дисплей;
DT_RASPRINTER растровый принтер;
DT_RASCAMERA растровая камера
TEXTCAPS Набор битовых масок, определяющих способность устройства выполнять операции с текстом:
TC_OP_CHARACTER точность соответствия запрашиваемого и предоставленного шрифта. Если установлен этот бит, устройство может обеспечить запрошенные атрибуты символов;TC_OP_STROKE устройство может обеспечить необходимую высоту, ширину, ориентацию и атрибуты текста;
TC_CP_STROKE точность вывода допускает обрезание символов шрифта для того, чтобы текст появился только внутри заданной области ограничения;
TC_CR_90 устройство может поворачивать символы только на угол, кратный 90 градусам;
TC_CR_ANY устройство может поворачивать символы на любой угол;
TC_SF_X_YINDEP устройство может масштабировать свой шрифт по вертикальной и горизонтальной оси;
TC_SA_DOUBLE устройство может удваивать размер своего шрифта;
TC_SA_INTEGER устройство может увеличивать размер своего шрифта в любое целое количество раз;
TC_SA_CONTIN устройство может выполнять произвольное масштабирование своего шрифта, сохраняя отношение между вертикальным и горизонтальным размером шрифта;
TC_EA_DOUBLE устройство может увеличивать жирность своего шрифта в два раза;
TC_IA_ABLE устройство может делать свой шрифт наклонным (italic);
TC_UA_ABLE устройство может делать свой шрифт подчеркнутым;
TC_SO_ABLE устройство может делать свой шрифт перечеркнутым;
TC_RA_ABLE устройство способно перечислять растровые шрифты или шрифты TrueType при вызове функций EnumFonts или EnumFontFamilies;
TC_VA_ABLE устройство способно перечислять векторные шрифтов при вызове функций EnumFonts или EnumFontFamilies;
TC_RESERVED не используется
VERTRES Высота дисплея в пикселах. Для принтеров — высота рабочей области, в которой принтер способен выполнять печать
VERTSIZE Стандартная высота дисплея в миллиметрах
Илон Маск рекомендует:  Что такое код exif_imagetype

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

Значения ASPECTX, ASPECTY, ASPECTXY определяют размеры пиксела. Зачем вам могут понадобиться размеры пиксела? Дело в том, что пикселы не всегда квадратные (или круглые). Поэтому в некоторых режимах работы видеоадаптера масштаб изображения по оси x может отличаться от масштаба по оси y. Размеры пиксела позволят вам вычислить отношение сторон пиксела и выполнить правильное масштабирование. В этом случае отображаемые вами окружности будут круглыми, а квадраты — квадратными.

Иногда бывает важно знать цветовое разрешение устройства вывода. Для этого можно использовать значение BITSPIXEL, которое соответствует количеству бит, используемых для представления цвета. Если возвести число 2 в степень значения BITSPIXEL, получится количество цветов, которое может быть представлено одним пикселом.

Некоторые устройства работают с цветовыми плоскостями. Количество этих плоскостей можно определить, пользуясь значением PLANES. Об использовании цветовых плоскостей можно прочитать в третьем томе «Библиотеки системного программиста», который называется «Программирование видеоадаптеров CGA, EGA и VGA». Отметим, что количество цветов, которые могут быть представлены устройством с цветовыми плоскостями, равно 2n, где n — количество цветовых плоскостей.

Если устройство работает с цветовыми плоскостями и использует несколько бит для представления цвета одного пиксела, количество одновременно отображаемых цветов можно определить по формуле:

где nPixel — количество битов, используемых для представления цвета пиксела (значение BITSPIXEL); nPlanes — количество цветовых плоскостей (значение PLANES).

Значение NUMCOLORS равно количеству цветов при использовании одной палитры. Так как палитра может быть перегружена, фактически вы можете использовать больше цветов, чем указано в NUMCOLORS. Но в этом случае вы должны сами перезагружать палитру. Для устройств, работающих с палитрами, правильное количество используемых цветов возвращается при использовании значения COLORRES.

4.4. Приложение DCAPS

Для проведения экспериментов и демонстрации возможностей функции GetDeviceCaps мы подготовили приложение DCAPS (листинг 4.4).

Листинг 4.4. Файл dcaps\dcaps.cpp

Это приложение интересно тем, что оно получает контекст устройства (видеоадаптера) новым для вас способом — при помощи функции CreateDC:

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

Перед завершением работы приложения мы уничтожаем созданный нами контекст:

Для вывода числовых характеристик драйвера устройства в шестнадцатеричном формате используется функция PrintH, для вывода в десятичном формате — функция PrintD. Обе эти функции формируют и выводят в заранее открытый текстовый файл строку, содержащую имя параметра и значение, полученное от функции GetDeviceCaps.

Для отображения параметров, представленных набором флагов, используется функция PrintFlag. Функция записывает в файл имя флага и его состояние. Если флаг сброшен (значение равно 0), он помечается знаком «-«, в противном случае — знаком «+».

Для отображения технологии, использованной драйвером, выполняется анализ значения, возвращаемого функцией GetDeviceCaps при передаче ей параметра TECHNOLOGY. В файл записывается возвращаемое этой функцией значение и его символьная расшифровка.

Файл определения модуля для приложения DCAPS представлен в листинге 4.5.

Листинг 4.5. Файл dcaps\dcaps.def

В листинге 4.6 приведен результат работы программы при использовании стандартного драйвера видеоконтроллера VGA, поставляющегося вместе с Windows версии 3.1.

Листинг 4.6. Образец файла devcap.txt для драйвера VGA, разрешение 640×480, 16 цветов

В поле DRIVERVERSION стоит значение 30a, что соответствует версии драйвера 3.1.

Для вывода используется квадратный пиксел с размерами (36, 36), так что никаких мер для обеспечения равного масштаба по осям x и y принимать не надо.

Стандартный драйвер обеспечивает вывод 16 цветов. Из приведенного выше листинга видно, что для представления цвета пиксела используется один бит (значение BITSPIXEL равно 1). Количество цветовых плоскостей (значение PLANES) равно 4, следовательно, количество возможных цветов будет равно 24, или 16.

Значение бита RC_PALETTE значения RASTERCAPS равно нулю, следовательно, драйвер не использует палитры. Поэтому значение COLORRES (цветовое разрешение в битах на пиксел) равно нулю. Значение SIZEPALETTE также равно 0.

Количество возможных цветов, определяемых при помощи NUMCOLORS, равно 16. Это значение согласуется с полученным при помощи BITSPIXEL и PLANES.

Для сравнения приведем возможности драйверов контроллера Cirrus Logic в режимах с использованием 65536 цветов и 16,7 млн. цветов (точное значение — 224 цветов). Результаты работы нашего приложения для этих драйверов приведены соответственно в листинге 4.7 и 4.8.

Листинг 4.7. Образец файла devcap.txt для драйвера Cirrus Logic, разрешение 640×480, 65536 цветов

Из листинга 4.7 видно, что драйвер использует для представления цвета пиксела 16 бит (значение BITSPIXEL). Количество цветовых слоев равно 1 (значение PLANES), поэтому общее количество доступных цветов равно 65536.

Тем не менее значение NUMCOLORS равно 4096, что не соответствует цветовым возможностям данного драйвера. Здесь нет ошибки, дело в том, что, как мы уже говорили, значение NUMCOLORS соответствует количеству цветов в одной палитре, но не количеству доступных цветов.

Обратим теперь внимание на результаты тестирования драйвера, работающего в режиме TrueColor с использованием 16,7 млн. цветов (листинг 4.8).

Листинг 4.8. Образец файла devcap.txt для драйвера Cirrus Logic, разрешение 640×480, 16,7 млн. цветов

Для этого режима цвет одного пиксела определяется 24 битами (значение BITSPIXEL) при использовании одной цветовой плоскости (значение PLANES). Поэтому общее количество доступных цветов равно 224, или, примерно 16,7 млн.

Значение NUMCOLORS по-прежнему равно 4096.

Приведем сравнительную таблицу параметров, связанных с размерами экрана и пикселов в различных режимах и для различных типов видеоадаптеров.

Вопрос по xcode, cashapelayer, mask, ios &#8211 Вид маски CAShapeLayer

У меня есть одна проблема. Я ищу ответы в сети, и я нене понимаю, почему не работает. Я должен сделать какую-то глупую ошибку, которую я могуне могу понять это.

это создает синий вид на экране, но если я сделаю

это неничего не показывать.

Если я правильно понимаю, это должно маскироваться в (10,10,30,30)?

Вам нужно установить путь на CAShapeLayer:

Если кто-то можетне могу найти подходящий ответ на этот вопрос в течение нескольких часов, как я только чтомы собрали рабочий гист в Swift 2.2 для / masking clipping UIView с /: CGRect UIBezierPath

Надеюсь, это сэкономит кому-то время в будущем :)

Крючок для функции API GetSystemMetrics

Помогите мне создать крючок для функции AP.I GetSystemMetrics. Я хочу, чтобы, когда какое-то приложение (например, calc.exe) вызывает GetSystemMetrics, они получают мое значение (например, 500×500), а другие приложения получают правильный размер экрана. И если кто-нибудь может сказать мне, как я могу это сделать, используйте C# и .net CF 2.0, я буду очень рад.

Спасибо и надеюсь, что вы поможете.

Создан 18 сен. 12 2012-09-18 12:42:12 Std_Net

[Почему?] (Http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – tenfour 18 сен. 12 2012-09-18 14:05:53

2 ответа

Вы не можете этого сделать, даже в собственном коде (по крайней мере, не без уродливых, плохих идей, vtable/kernel memory hacks, которые могут или не могут работать в разных версиях ОС). GetSystemMetrics обращается к ОС для получения информации о платформе. Нет никакого способа перекомпиляции ОС и изменения этих значений, чтобы вы могли «переопределить» эти значения и заставить ОС сообщать другие номера (если, конечно, ОС не была построена таким образом, что эти числа поступали из где-то ваше приложение может изменить — например, в реестре).

EDIT

на основе ваших комментариев, фактическая проблема заключается в том, что вы пытаетесь создать некоторую форму «панель задач» типа приложения, и вы хотели бы другие приложения за пределами вашего контроля не накладывать ваш когда они максимизируются. Именно так работает панель задач exisiting Explorer, поэтому мое предложение — посмотреть в исходный код оболочки по умолчанию и посмотреть, как это делается там.

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

Создан 18 сен. 12 2012-09-18 14:02:26 ctacke

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL