下面代码演示了如何把文本复制到剪贴板和如何从剪贴板获得文本
#include <windows.h>
#include 
"resource.h"
#pragma comment(linker, "subsystem:windows") //使你可以打开此c源文件进行编译而不需设置工程设置,当然菜单资源还是要你自己建
//过程函数的返回值都是LRESULT,类型都是CALLBACK
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
{
    HWND hwnd;        
//主窗口句柄,在CreateWindow中赋值
    MSG msg;        //消息变量,在GetMessage中使用
    WNDCLASS wndclass;        //窗口类
    TCHAR* szAppName = TEXT("Clipboard");    //类名和窗口名
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //窗口背景
    wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);        //鼠标
    wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);    //图标
    wndclass.lpszClassName = szAppName;        //类名
    wndclass.cbClsExtra = 0;        //类的额外参数
    wndclass.cbWndExtra = 0;        //窗口的额外参数.用于基于同一窗口类的窗口各自区分.
                                    
//在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小
    wndclass.lpszMenuName = TEXT("MAINMENU");    //菜单名.可以用作子窗口的id
    wndclass.style = CS_HREDRAW | CS_VREDRAW;    //窗口风格
    wndclass.lpfnWndProc = WndProc;        //窗口过程
    wndclass.hInstance = hInstance;        //包含窗口过程的实例句柄

    
if!RegisterClass(&wndclass) )        //注册窗口类
        return 0;
    hwnd 
= CreateWindow(                //创建窗口
                szAppName,                //窗口类名
                szAppName,                //窗口标题
                WS_OVERLAPPEDWINDOW,    //窗口风格
                CW_USEDEFAULT,            //初始的x坐标
                CW_USEDEFAULT,            //初始的y坐标
                CW_USEDEFAULT,            //初始的宽度
                CW_USEDEFAULT,            //初始的高度
                NULL,                    //父窗口
                NULL,                    //菜单
                hInstance,                //和窗口相关的实例句柄
                NULL                    //额外参数
                );
    ShowWindow( hwnd,nCmdShow );        
//显示窗口
    UpdateWindow( hwnd );                //更新窗口
    while( GetMessage(&msg,NULL,0,0) )    //消息循环
    {
        TranslateMessage(
&msg);            //将WM_XXXKEYXXX消息翻译为WM_CHAR消息
        DispatchMessage(&msg);            //传递消息到窗口过程
    }    
    
return msg.wParam;                    //返回
}
LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
{
    
static char *pText;
    
switch( message )
    {
    
case WM_INITMENUPOPUP:
        EnableMenuItem(
            (HMENU)wParam,
            IDM_FILE_PASTE, 
            IsClipboardFormatAvailable(CF_TEXT) 
? MF_ENABLED : MF_GRAYED);
        
return 0;
    
case WM_DESTROY:
        PostQuitMessage(
0);
        
return 0;
    
case WM_COMMAND:
        
switch( LOWORD(wParam) )
        {
        
case IDM_FILE_COPY:
            {
                HGLOBAL hglobal 
= GlobalAlloc(GMEM_MOVEABLE , 6);//分配剪贴板数据的空间
                if( hglobal == NULL )
                {
                    
return 0 ;
                }
                pText 
= (char*)GlobalLock(hglobal);//取得操作刚分配了的空间的指针
                lstrcpy(pText, "hello");//把数据复制到该指针指向的空间
                GlobalUnlock(hglobal);
                OpenClipboard(hwnd);    
//打开剪贴板
                EmptyClipboard();        //清空剪贴板
                SetClipboardData(CF_TEXT, hglobal);    //真正把数据放到剪贴板
                CloseClipboard();        //关闭剪贴板
                return 0;
            }
        
case IDM_FILE_PASTE:
            {
                RECT rc;
                HDC hdc 
= GetDC(hwnd);
                HGLOBAL hglobal;

                OpenClipboard(hwnd);    
//打开剪贴板
                hglobal = GetClipboardData(CF_TEXT);    //取得存放剪贴板数据的空间的句柄
                if(hglobal == NULL)
                {
                    
return 0;
                }
                pText 
= (char*)malloc(GlobalSize(hglobal)); //分配空间以保存从剪贴板获得的数据
                if( pText == NULL )
                {
                    
return 0;
                }
                lstrcpy(pText, GlobalLock(hglobal));
//真正从剪贴板获得数据
                GlobalUnlock(hglobal); //GlobalLock与GlobalUnlock的调用要成对
                CloseClipboard(); //OpenClipboard与CloseClipboard的调用要成对
                
                GetClientRect(hwnd, 
&rc);
                DrawText(hdc, pText, 
-1&rc, DT_CENTER | DT_EXPANDTABS);
                free(pText); 
//malloc与free的调用要成对
                return 0;
            }
        }
    }
    
return DefWindowProc( hwnd,message,wParam,lParam );
}