Hi,
mit dem direktem Subclassing und dem Anpassen des Stils in PreCreateWindows klappt leider nicht ohne größeren Aufwand,deshalb hier nen kleiner Workaround.
Ist sicher nicht optimal aber tut seinen Dienst :wink: .
Line.h:
|
C Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#ifndef __HORZ_LINE_H
#define __HORZ_LINE_H
class CLine : public CStatic
{
DECLARE_DYNAMIC(CLine)
public:
CLine();
virtual ~CLine();
bool Init();
protected:
DECLARE_MESSAGE_MAP()
HWND hLine;
CRect rect;
public:
afx_msg void OnDestroy();
};
#endif
|
Line.cpp:
|
C Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include "stdafx.h"
#include "Line.h"
IMPLEMENT_DYNAMIC(CLine, CStatic)
CLine::CLine()
{
}
CLine::~CLine()
{
}
BEGIN_MESSAGE_MAP(CLine, CStatic)
ON_WM_DESTROY()
END_MESSAGE_MAP()
bool CLine::Init()
{
CRect rect;
this->GetWindowRect(&rect);
hLine = CreateWindowEx(0, TEXT("static"), TEXT(""),
WS_CHILD|WS_VISIBLE|SS_ETCHEDHORZ,
0,rect.Height()/2,rect.Width(),10,
this->GetSafeHwnd(),0,0,0);
if(hLine==NULL)
return false;
return true;
}
void CLine::OnDestroy()
{
CStatic::OnDestroy();
::DestroyWindow(hLine);
}
|
Um die Klasse zu benutzen einfach Header und Implementierung deinem Projekt hinzufügen.
Dann im Resourceneditor Staticfelder anlegen wo du die Trennlinien haben möchtest.
Den Staticfeldern andere ID´s geben damit du für diese Controlvariablen anlegen kannst.
Dann Controllvariablen anlegen und anschliessend im Header des Dialogs den Line Header inkludieren und den Typ der Controlvariablen auf CLine ändern.
Jetzt nur noch in OnInitDialog für die Controlvariablen die Init Methode aufrufen und fertig.
Gruß void