怎么让对话框支持竖直滚动条?

解决方案 »

  1.   

    首先在对话框属性中钩选Vertical scroll,让对话框先支持滚动条重载ON_WM_VSCROLL消息
    添加{}内的代码
    void CChild_contactlist::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    int h = 10;
    SCROLLINFO si;
    si.cbSize = sizeof(SCROLLINFO);
    si.fMask = SIF_ALL;
    GetScrollInfo(SB_VERT,&si);
             int nOldPos = si.nPos; switch(nSBCode)
    {
    case SB_LINEDOWN:
    si.nPos = min(si.nPos+h, si.nMax);
    break;
    case SB_PAGEDOWN:
    si.nPos = min(si.nPos+h*10, si.nMax);
    break;
    case SB_LINEUP:
    si.nPos = max(si.nPos-h, si.nMin);
    break;
    case SB_PAGEUP:
    si.nPos = max(si.nPos-h*10, si.nMin);
    break;
    case SB_THUMBPOSITION:
    case SB_THUMBTRACK:
    si.nPos = si.nTrackPos;
    break;
    case SB_TOP:
    si.nPos = si.nMin;
    break;
    case SB_BOTTOM:
    si.nPos = si.nMax;
    break;
    }
    SetScrollInfo(SB_VERT,&si);
    GetScrollInfo(SB_VERT,&si); //重新获取新的位置 ScrollWindow(0, nOldPos - si.nPos);
    }that's ok
    May you succeed!
      

  2.   

    void CArtDlg::OnPaint() 
    {
    //CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here

    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting

    SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

    // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialog::OnPaint();
    }

    CDC* pDC;
    pDC=GetDC();

    rato=float((m_bitmapRect.right-m_bitmapRect.left)/vartorient.Size.x);
    m_bitmapRect.bottom=m_bitmapRect.top+int(vartorient.Size.x*rato);
    Draw(pDC,&m_bitmapRect); // Do not call CDialog::OnPaint() for painting messages
    }void CArtDlg::OnArtparameter() 
    {
    // TODO: Add your control notification handler code here
    CDC dc;
    CPrintDialog printDlg(FALSE);
    short printQuality;

    if(printDlg.DoModal()==IDCANCEL)
    return;
    printDlg.GetDefaults ();
    DEVMODE *dm = printDlg.GetDevMode(); 
    dm->dmOrientation = DMORIENT_LANDSCAPE;
    dm->dmFields |= DM_ORIENTATION; 
    printQuality=dm->dmPrintQuality;
    //将打印纸大小设为自定义
    dm->dmPaperSize=NULL;
    //定义打印纸的长宽
    dm->dmPaperLength=vartorient.Size.y;
    dm->dmPaperWidth=vartorient.Size.x;


    dc.Attach(printDlg.CreatePrinterDC());

    dc.m_bPrinting=TRUE;
    CString strTitle;
    strTitle.LoadString (AFX_IDS_APP_TITLE);


    DOCINFO di; // DOCINFO中有相关的打印信息
    ::ZeroMemory (&di, sizeof (DOCINFO));
    di.cbSize = sizeof (DOCINFO);
    di.lpszDocName = strTitle;//设置标题

    if(dc.StartDoc(&di)==-1)// 开始打印
    {
    MessageBox("StartDoc error");
    return ;
    }
    int horze=dc.GetDeviceCaps (HORZRES);
    int vertical=dc.GetDeviceCaps (VERTRES);

    //加入修改信息的语句

    dc.StartPage();
    rato=float((printQuality)/25.4);
    //m_bitmapRect.bottom =m_bitmapRect.top+int(vartorient.Size.y *rato);

    Draw(&dc,&m_bitmapRect);
    dc.EndPage();


    dc.EndDoc();  

    }
    可以帮我看看这段代码吗?我向竖着打印,可是打出来的老是横着的,怎么办?
    我还会再给分的。