title: Print Dialog Box in Win32
body: <p>I came across this tutorial  <a href="http://www.youtube.com/watch?v=BECw2Ouz4I0" rel="nofollow">http://www.youtube.com/watch?v=BECw2Ouz4I0</a></p>
  
  <p>I went ahead and added  print dialog box based on that example in my code. I end up having three 3error:</p>
  
  <p>PRINTDLG is undefined
  PD_RETURNDC is undefined 
  PrintDlg is undefined</p>
  
  <p>How do I defined these? </p>
  
  <pre><code>  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
   {
  int wmId, wmEvent;
  PAINTSTRUCT ps;
  
  HDC hdc;
  
  switch (message)
  {
  case WM_COMMAND:
      wmId    = LOWORD(wParam);
      wmEvent = HIWORD(wParam);
      // Parse the menu selections:
      switch (wmId)
      {
  
      case IDM_ABOUT:
          DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
          break;
      case IDM_EXIT:
          DestroyWindow(hWnd);
          break;
  
      case IDM_PRINT:
          DestroyWindow(hWnd);            
     {
  static PRINGDLG pDlg;
  static DOCINFO dInfo;
  
  dInfo.cbSize = sizeof (dInfo);
  dInfo.lpszDocName = L"Printing!"; 
  
  pDlg.Flags =  PD_RETURNDC;
  pDlg.hInstance = (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE);
  pDlg.IStructSize = sizeof(pDlg);
  pDlg.hwndOwner - hWnd;
  
  PrintDlg(&amp;pDlg);
  
  StartDoc(pDlg.hdc,&amp;dInfo);
  
  StartPage(pDlg.hdc);
  
  TextOut(pDlg.hDC,0,0,L"Hello",6);
  
  EndPage(pDlg.hdc);
  
  EndDoc(pDlg.hdc);
  
  ReleaseDC(hWnd, pDlg.hdc);
  
     } 
  </code></pre>
  
  <p>Would I defined them in the cpp file, rc, or h file? </p>
  
  <p>Thanks </p>
  
  <pre><code>   // Win32Lesson1.cpp : Defines the entry point for the application.
     //
  
    #include "stdafx.h"
    #include "Win32Lesson1.h"
    #include &lt;windows.h&gt;
    #include "Resource.h"
  
    #define MAX_LOADSTRING 100
  
  
    bool gbDrawLine1     = false;
    bool gbDrawEllipse1  = false;
    bool gbDrawRectangle1 = false; 
   bool gbDrawLine2 = false; 
   bool gbDrawRectangle2 = false; 
   bool gbDrawEllipse2  = false;
  
  
  
  
  
  
        // Global Variables:
      HINSTANCE hInst;        // current instance
     TCHAR szTitle[MAX_LOADSTRING];                   // The title bar text
     TCHAR szWindowClass[MAX_LOADSTRING];         // the main window class name
  
     // Forward declarations of functions included in this code module:
    ATOM              MyRegisterClass(HINSTANCE hInstance);
    BOOL              InitInstance(HINSTANCE, int);
   LRESULT CALLBACK   WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK  About(HWND, UINT, WPARAM, LPARAM);
  
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
   {
  UNREFERENCED_PARAMETER(hPrevInstance);
  UNREFERENCED_PARAMETER(lpCmdLine);
  
  // TODO: Place code here.
  MSG msg;
  HACCEL hAccelTable;
  
  // Initialize global strings
  LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  LoadString(hInstance, IDC_WIN32LESSON1, szWindowClass, MAX_LOADSTRING);
  MyRegisterClass(hInstance);
  
  // Perform application initialization:
  if (!InitInstance (hInstance, nCmdShow))
  {
      return FALSE;
  }
  
  hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32LESSON1));
  
  // Main message loop:
  while (GetMessage(&amp;msg, NULL, 0, 0))
  {
      if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg))
      {
          TranslateMessage(&amp;msg);
          DispatchMessage(&amp;msg);
      }
  }
  
  return (int) msg.wParam;
     }
  
  
  
   //
   //  FUNCTION: MyRegisterClass()
   //
  //  PURPOSE: Registers the window class.
  //
  //  COMMENTS:
  //
    //    This function and its usage are only necessary if you want this code
   //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
  //    function that was added to Windows 95. It is important to call this function
   //    so that the application will get 'well formed' small icons associated
   //    with it.
   //
   ATOM MyRegisterClass(HINSTANCE hInstance)
  {
  WNDCLASSEX wcex;
  
  wcex.cbSize = sizeof(WNDCLASSEX);
  
  wcex.style          = CS_HREDRAW | CS_VREDRAW;
  wcex.lpfnWndProc    = WndProc;
  wcex.cbClsExtra     = 0;
  wcex.cbWndExtra     = 0;
  wcex.hInstance      = hInstance;
  wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32LESSON1));
  wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
  wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_WIN32LESSON1);
  wcex.lpszClassName  = szWindowClass;
  wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  
  return RegisterClassEx(&amp;wcex);
  }
  
    //
   //   FUNCTION: InitInstance(HINSTANCE, int)
   //
      //   PURPOSE: Saves instance handle and creates main window
   //
     //   COMMENTS:
    //
     //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
     //
  
  
  
     BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
    HWND hWnd;
  
  
    hInst = hInstance; // Store instance handle in our global variable
  
    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  
    if (!hWnd)
    {
     return FALSE;
    }
  
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
  
   return TRUE;
   }
  
  
     //
     //  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
       //
     //  PURPOSE:  Processes messages for the main window.
    //
    //  WM_COMMAND    - process the application menu
    //  WM_PAINT  - Paint the main window
    //  WM_DESTROY    - post a quit message and return
  </code></pre>