如何做个贴图CDialog的基类
比如叫做picWnd类,里面写好了,贴图的OnPaint(),怎么用这个类创建新的CDialog窗体??class picWnd()
{
afx_msg void OnPaint();
}
这样创建的新窗口出错
class CMyWinDlg :  public CDialog,picWnd
这样也不行
class CMyWinDlg :  public picWnd怎么才行??

解决方案 »

  1.   

    class CMyWinDlg :  public CDialog
    就可以了class CMyWinDlg :  public CDialog
    {
    afx_msg void OnPaint(); 
    }BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 之间添加ON_WM_PAINT()
      

  2.   

    可是跟踪时,根本就没执行基类的OnPaint()啊
      

  3.   

    你的afx_msg void OnPaint(); 函数放在picWnd类中怎么会调用呢?
    不需要去定义picWnd类。
    按照我上面的说明做
      

  4.   


    BEGIN_MESSAGE_MAP(CMyWinDlg, CDialog)
    ON_WM_PAINT()
    END_MESSAGE_MAP()
      

  5.   

    class picWnd()
    {
       void Paint();//不要使用OnPaint名字
    } class CMyWinDlg :  public CDialog,picWnd 
    在CMyWinDlg的OnPaint函数中调用Paint函数。BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 之间添加ON_WM_PAINT()
      

  6.   

    派生一个对话框CDialog类CDialogEx
    class CDialogEx : public CDialog
    {
    // Construction
    public: CDialogEx(UINT nID,CWnd* pParent = NULL);   // standard constructor
    virtual ~CDialogEx();// Dialog Data
    //{{AFX_DATA(CDialogEx)
    在里面处理OnPaint消息再用class CMyWinDlg :  public CDialogEx 
      

  7.   


    这样会有个link错误error LNK2005: "protected: virtual struct AFX_MSGMAP const * __thiscall picWnd ::GetMessageMap(void)const "
      

  8.   


    请问这个CMyWinDlg最初应该定义为什么基类,是空C++的还是MFC from CDialog,还是手动添加文件?
      

  9.   


    class CImageDlg : public CDialog
    {
    DECLARE_DYNAMIC(CImageDlg)public:
    CImageDlg(UINT nIDTemplate,CWnd* pParent = NULL);   // 标准构造函数
    CImageDlg(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
    virtual ~CImageDlg(); void DrawPosImage(CBitmap *pBitmap, CDC *pDC, CPoint pt);
    void DrawRangeImage(CBitmap *pBitmap, CDC *pDC, CRect rc);
    void SetImage(CBitmap &bitmap, CString strName);
    void SetImageSize(CBitmap *pBitmap, CSize &sz);protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 CBitmap m_BitmapTopLeft;
    CSize m_szBitmapTopLeft;
    CBitmap m_BitmapTopMid;
    CSize m_szBitmapTopMid;
    CBitmap m_BitmapTopRight;
    CSize m_szBitmapTopRight; CBitmap m_BitmapCenterLeft;
    CSize m_szBitmapCenterLeft;
    CBitmap m_BitmapCenterRight;
    CSize m_szBitmapCenterRight; CBitmap m_BitmapBottomLeft;
    CSize m_szBitmapBottomLeft;
    CBitmap m_BitmapBottomMid;
    CSize m_szBitmapBottomMid;
    CBitmap m_BitmapBottomRight;
    CSize m_szBitmapBottomRight;
    DECLARE_MESSAGE_MAP()
    public:
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg UINT OnNcHitTest(CPoint point);
    };自己用的,使用时从这个CImageDlg继承即可
      

  10.   

    其实就是新建一个工程,建个class picWnd() :public CDialog 基础类然后用这个picWnd类来派生新的类。picWnd里面有的功能,在派生的类中就不用重写了。
      

  11.   


    CPP文件有吗,另外调用的地方怎么写
      

  12.   

    解决了,只要基类来自于CDialog,其他的基本不需要修改。但是基础类的CDialog中有标题栏和 确定 取消 按钮,怎么去掉?ModifyStyle( SWP_DRAWFRAME ) 怎么不行?
      

  13.   

    重载PreCreateWindow(CREATESTRUCT& cs)函数
    在这里设置