WinAPI:PageSetupDlg、PagePaintHook

来源:互联网 发布:大数据时代的精准营销 编辑:程序博客网 时间:2024/05/16 12:19

一、PageSetupDlg

 函数功能:该函数创建一个PageSetup对话框,此对话框能使用户指定打印页的属性。这些属性包括纸张大小和来源,送纸方向和页边距。

    函数原型:BOOL PageSetupDlg(LPPAGESETUPDLGI ppsd);

    参数:

    Ippsd:指向一个包含初始化对话框信息的PAGESETUPDLG结构。当函数返回时,该结构存放有关用户选择的信息。

    返回值:如果用户点击OK钮,返回值为非零值,Ippsp参数指向的PAGESETUPDLG结构中的成员显示用户的选择。如果用户取消或关闭PageSetup对话框或错误出现,返回值为零。

二、PagePaintHook

 函数功能:该挂钩函数是一个由应用程序或库定义的回调函数,该回调函数与PageSetup函数一起使用。该函数接收制作PageSetup对话框中样本页绘图的消息。LLPPAGEPAINTHOOK类型定义了一个指向此回调函数的指针。PagePaintHook是由应用程序或库定义的函数名的位置持有者。

    函数原型:UINT CALLBACK PagePaintHook(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);

    参数:

    hdlg:指向pagesetup对话枢窗口的句柄。

    uiMsg:标识接收的消息。

    wparam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。

    IParam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。

    返回值:如果挂钩函数对前三个绘图顺序消息中的任何一个返回值为TRUE。且前三个消息为WM_PSD_PAGESETUPDLG,WM_PSD_FULLPAGERECT或WM_PSD_MINMARGINRECT),对话框不再发送消息。且直到下一次系统需要重画样本页时才绘出样本页。如果对所有的三个消息。挂钩函数返回FALSE,对话框发送给图顺序的保留的消息


三、样例

UINT_PTR CALLBACK  PaintHook (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam){switch(uiMessage){case WM_INITDIALOG:{int a = 3;}break;default:break;}return 0;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case  WM_CREATE:break;case WM_COMMAND:wmId    = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择:switch (wmId){case ID_TEST:{PAGESETUPDLG psd;    // common dialog box structureHWND hwnd;           // owner window// Initialize PAGESETUPDLGZeroMemory(&psd, sizeof(psd));psd.lStructSize = sizeof(psd);psd.hwndOwner   = hWnd;psd.hDevMode    = NULL; // Don't forget to free or store hDevMode.psd.hDevNames   = NULL; // Don't forget to free or store hDevNames.psd.Flags       = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS | PSD_ENABLEPAGEPAINTHOOK; psd.rtMargin.top = 1000;psd.rtMargin.left = 1250;psd.rtMargin.right = 1250;psd.rtMargin.bottom = 1000;psd.lpfnPagePaintHook = PaintHook;if (PageSetupDlg(&psd)==TRUE){// check paper size and margin values here.}}break;default:{return DefWindowProc (hWnd, message, wParam, lParam) ;}}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意绘图代码...EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}



0 0