На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using the Owner-Display Clipboard Format



If a window places information on the clipboard by using the CF_OWNERDISPLAY clipboard format, it must do the following:

· Process the WM_PAINTCLIPBOARD message. This message is sent to the clipboard owner when a portion of the clipboard viewer window must be repainted.
· Process the WM_SIZECLIPBOARD message. This message is sent to the clipboard owner when the clipboard viewer window has been resized or its content has changed.

Typically, a window responds to this message by setting the scroll positions and ranges for the clipboard viewer window. In response to this message, the Label application also updates a SIZE structure for the clipboard viewer window.

· Process the WM_HSCROLLCLIPBOARD and WM_VSCROLLCLIPBOARD messages. These messages are sent to the clipboard owner when a scroll bar event occurs in the clipboard viewer window.
· Process the WM_ASKCBFORMATNAME message. The clipboard viewer window sends this message to an application to retrieve the name of the owner-display format.



The window procedure for the Label application processes these messages, as follows.

LRESULT CALLBACK MainWindowProc(hwnd, msg, wParam, lParam)
HWND hwnd;
UINT msg;
WPARAM wParam;
LPARAM lParam;
{
static RECT rcViewer;

RECT rc;
LPRECT lprc;
LPPAINTSTRUCT lpps;

switch (msg)
{
//
// Handle other messages.
//

case WM_PAINTCLIPBOARD:
// Determine the dimensions of the label.

SetRect(&rc, 0, 0,
pboxLocalClip->rcText.right + CX_MARGIN,

pboxLocalClip->rcText.top * 2 + cyText
);

// Center the image in the clipboard viewer window.

if (rc.right < rcViewer.right)
{
rc.left = (rcViewer.right - rc.right) / 2;
rc.right += rc.left;
}
if (rc.bottom < rcViewer.bottom)
{
rc.top = (rcViewer.bottom - rc.bottom) / 2;
rc.bottom += rc.top;

}

// Paint the image, using the specified PAINTSTRUCT
// structure, by calling the application-defined
// PaintLabel function.

lpps = (LPPAINTSTRUCT) GlobalLock((HGLOBAL) lParam);
PaintLabel(lpps, pboxLocalClip, &rc);
GlobalUnlock((HGLOBAL) lParam);
break;

case WM_SIZECLIPBOARD:
// Save the dimensions of the window in a static
// RECT structure.


lprc = (LPRECT) GlobalLock((HGLOBAL) lParam);
memcpy(&rcViewer, lprc, sizeof(RECT));
GlobalUnlock((HGLOBAL) lParam);

// Set the scroll ranges to zero (thus eliminating
// the need to process the WM_HSCROLLCLIPBOARD and
// WM_VSCROLLCLIPBOARD messages).

SetScrollRange((HWND) wParam, SB_HORZ, 0, 0, TRUE);
SetScrollRange((HWND) wParam, SB_VERT, 0, 0, TRUE);


break;

case WM_ASKCBFORMATNAME:
LoadString(hinst, IDS_OWNERDISPLAY,
(LPSTR) lParam, wParam);
break;

default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Owner-Display Clipboard Format



Если окно устанавливает информацию о буфере используя буфер формата CF_OWNERDISPLAY, оно должно делать следующим:

Процесс сообщение WM_PAINTCLIPBOARD. Это сообщение послано в буфер владельца когда часть буфера окна абонента должна быть перекрашена.
Процесс сообщение WM_SIZECLIPBOARD. Это сообщение послано в буфер владельца когда буфер окна абонента поменен размеры или содержимое изменилось.

Обычно, окно реагирует на это сообщение устанавливая перемещать позиции и области для буфера окна абонента. В ответ на это сообщение, приложение Этикетки также корректирует РАЗМЕР структуры для буфера окна абонента.

Процесс WM_HSCROLLCLIPBOARD и сообщения WM_VSCROLLCLIPBOARD. Эти сообщения посланы в буфер владельца когда перемещать зону, событие происходит в буфере окна абонента.
Процесс сообщение WM_ASKCBFORMATNAME. Буфер окна абонента посылает это сообщение в приложение, чтобы извлекать имя владелец-дисплейного формата.



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

LRESULT CALLBACK MainWindowProc(hwnd, msg, wParam, lParam) HWND hwnd;
msg UINT;
WPARAM wParam;
LPARAM lParam;
{
статический RECT rcViewer;

rc RECT;
LPRECT lprc;
lpps LPPAINTSTRUCT;

ключ (msg)
{
//
// Ручка другие сообщения.
//

случай WM_PAINTCLIPBOARD: // Определять измерения этикетки.

SetRect(&rc, 0, 0, pboxLocalClip->rcText.right + CX_MARGIN,

pboxLocalClip->rcText.top * 2 + cyText
);

// Отцентрируйте образ в буфере окна абонента.

если (rc.right < rcViewer.right)
{
rc.left = (rcViewer.right - rc.right) / 2;
rc.right += rc.left;
}
если (rc.bottom < rcViewer.bottom)
{
rc.top = (rcViewer.bottom - rc.bottom) / 2;
rc.bottom += rc.top;

}

// Краска образ, использовавший определенную структуру PAINTSTRUCT //, вызывая определенное приложение // функция PaintLabel.

lpps = (LPPAINTSTRUCT) GlobalLock((HGLOBAL) lParam);
PaintLabel(lpps, pboxLocalClip, &rc);
GlobalUnlock((HGLOBAL) lParam);
прерывание;

случай WM_SIZECLIPBOARD: // Сохраняемый измерения окна в статической // структуре RECT.


lprc = (LPRECT) GlobalLock((HGLOBAL) lParam);
memcpy(&rcViewer, lprc, sizeof(RECT));
GlobalUnlock((HGLOBAL) lParam);

// Установленное перемещать области в нуль (таким образом устранять // необходимость, чтобы обрабатывать WM_HSCROLLCLIPBOARD и // сообщения WM_VSCROLLCLIPBOARD).

SetScrollRange((HWND) wParam, SB_HORZ, 0, 0, ИСТИНА);
SetScrollRange((HWND) wParam, SB_VERT, 0, 0, ИСТИНА);


прерывание;

случай WM_ASKCBFORMATNAME: LoadString(hinst, IDS_OWNERDISPLAY, (LPSTR) lParam, wParam);
прерывание;

умолчание:
возвращайте DefWindowProc(hwnd, msg, wParam, lParam);
}
возврат 0;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz