002
02.05.2009, 13:02 Uhr
~tomycat
Gast
|
ok, neu angesetzt... Jetzt habe ich eines der CodeProjekts auseinandergenommen.
WENN ICH:
Die KLasse:
C++: |
CScrollDlgDemoDlg::CScrollDlgDemoDlg(CWnd* pParent /*=NULL*/) : CDialog(CScrollDlgDemoDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_bInitialized = FALSE; // <-- neu !!!!!!!!!!!!! }
|
Message Map:
C++: |
BEGIN_MESSAGE_MAP(CScrollDlgDemoDlg, CDialog)
ON_WM_VSCROLL() //neu ON_WM_SIZE() //neu END_MESSAGE_MAP()
|
BOOL CScrollDlgDemoDlg::OnInitDialog() { //neu ab hier............. m_nHscrollPos = 0; m_nVscrollPos = 0; GetClientRect(&m_ClientRect); m_bInitialized = TRUE; CRect initRect; GetClientRect(initRect); initRect.left = initRect.right - GetSystemMetrics(SM_CXHSCROLL); initRect.top = initRect.bottom - GetSystemMetrics(SM_CYVSCROLL); DWORD dwStyle = WS_CHILD | SBS_SIZEBOX | SBS_SIZEBOXBOTTOMRIGHTALIGN | SBS_SIZEGRIP | WS_VISIBLE;
m_Grip.Create(dwStyle,initRect, this, AFX_IDW_SIZE_BOX);
SetWindowPos(NULL ,180,40,200,250,SWP_NOREPOSITION); //bis hier .... [/cpp]
CGripper:
C++: |
BEGIN_MESSAGE_MAP(CGripper, CScrollBar) END_MESSAGE_MAP()
UINT CGripper::OnNcHitTest(CPoint point) { UINT ht = CScrollBar::OnNcHitTest(point); if(ht==HTCLIENT) { ht = HTBOTTOMRIGHT; } return ht; }
|
onVSroll und OnSize:
C++: |
void CScrollDlgDemoDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int nInc; switch (nSBCode) { case SB_TOP: nInc = -m_nVscrollPos; break; case SB_BOTTOM: nInc = m_nVscrollMax-m_nVscrollPos; break; case SB_LINEUP: nInc = -1; break; case SB_LINEDOWN: nInc = 1; break; case SB_PAGEUP: nInc = min(-1, -m_nVertInc); break; case SB_PAGEDOWN: nInc = max(1, m_nVertInc); break; case SB_THUMBTRACK: nInc = nPos - m_nVscrollPos; break; default: nInc = 0; }
nInc = max(-m_nVscrollPos, min(nInc, m_nVscrollMax - m_nVscrollPos)); m_nVscrollPos += nInc; int iMove = -4 * nInc; ScrollWindow(0, iMove, NULL, NULL); SetScrollPos(SB_VERT, m_nVscrollPos, TRUE);
CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }
void CScrollDlgDemoDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if (m_bInitialized) {
ScrollWindow(0, m_nVscrollPos*4, NULL, NULL); m_nHscrollPos = 0; m_nVscrollPos = 0; SetScrollPos(SB_VERT, m_nVscrollPos, TRUE); CRect tempRect; GetClientRect(&tempRect); WINDOWPLACEMENT wp; GetWindowPlacement(&wp); BOOL bMaximized = (wp.showCmd == SW_MAXIMIZE); m_nVertInc = (m_ClientRect.Height() - tempRect.Height())/4; m_Grip.ShowWindow(SW_SHOW); m_nVscrollMax = max(0, m_nVertInc); m_nVscrollPos = min(m_nVscrollPos, m_nVscrollMax); SetScrollRange(SB_VERT, 0, m_nVscrollMax, FALSE); SetScrollPos(SB_VERT, m_nVscrollPos, TRUE); }
|
DIE HEADER DATEI:
C++: |
class CScrollDlgDemoDlg : public CDialog { public: ... protected: .... //neu:ab hier void SetupScrollbars(); void ResetScrollbars(); int m_nHorzInc, m_nVertInc, m_nVscrollMax, m_nHscrollMax, m_nVscrollPos, m_nHscrollPos;
CRect m_ClientRect; BOOL m_bInitialized; CGripper m_Grip; afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg void OnSize(UINT nType, int cx, int cy); //neu ende
|
class Cgripper...
C++: |
//neu class CGripper : public CScrollBar { public: CGripper(){}; public: virtual ~CGripper(){}; protected: afx_msg UINT OnNcHitTest(CPoint point); DECLARE_MESSAGE_MAP() }; //neu ende
|
---------------------------- Wenn ich ein neues Projekt erstelle (MFC Dialog basis) und ich die Codes schnipsel hinzufüge(CScrollDlgDemoDlg in Cblabla umbenannt), dann habe ich ein scroll Leiste am Rechten Rand,geht 1a !!!
Zu meinem Problem, ich habe vom meinem MFC Hauptdialog ein CDialog mit einer neuen Klasse ertsellt und die Code schnipsel hinzugefügt(CScrollDlgDemoDlg in Chochund umbenannt),dann fehlt mir...
C++: |
Chochund::Chochund(CWnd* pParent /*=NULL*/) : CDialog(Chochund::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
|
ok,hinzugefügt kommt folgende Fehlermeldung:
Code: |
hochund.cpp(281): error C2084: function 'Chochund::Chochund(CWnd *)' already has a body
|
Ich bin für Idee/Vorschlag 1000 mal Dankbar,weil dann ist mein Projekt 99% fertig ist. |