C语言中PostMessage And SendMessage(二)

2014-11-23 22:37:13 · 作者: · 浏览: 12
essage函数之前,应检查发送的消息是否被Windows CE所支持。

.使用环境:

Windows NT:3.1及以上版本;

Windows:95及以上版本;

Windows CE:1.0及以上版本;

头文件:winuser.h;

输入库:user32.lib;

Unicode:在WindowsNT(Windows2000)环境下以Unicode和ANSI方式实现。

.示例代码:

case WM_KEYDOWN:

switch (wParam)

{

case VK_HOME:

SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;

break ;

case VK_END:

SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ;

break ;

case VK_PRIOR:

SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ;

break ;

...

}

return 0 ;

...

.常见问题

1)使用SendMessage来实现剪切、复制和粘贴

SendMessage(hwnd, WM_COPY, 0, 0);

SendMessage(hwnd, WM_CUT, 0, 0);

SendMessage(hwnd, WM_PASTE, 0, 0);

2)SendMessage与PostMessage的区别

PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回

3)SendMessage发送WM_COPYDATA消息在进程间传送数据

WM_COPYDATA消息主要目的是允许在进程间传递少量只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。

例如:

std:string strData = "VC知识库VCKBASE.COM";

COPYDATASTRUCT cds;

cds.dwData = 0;

cds.cbData = strData.Length();

cds.lpData = strData.c_str();

::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds);