You are not logged in.

  • Login

1

Tuesday, November 7th 2006, 4:08pm

Trennlinien im Dialogfenster???

Hallo.
Ich brauche in meinem MFC-Programm ein Dialogfenster das nach dem Schema
der Lizenzvereinbarungs-Dialofenster aussieht.
Was mir fehlt sind die Trennlinien die solche Dialogfenster in mehrere Bereiche unterteilt. In dem Resourceneditor kann ich keine finden.

Wie kriege ich Trennlinien in mein Dialogfenster und auch noch an die richtigen stellen fals es mit dem Resourceneditor nicht geht?

allesc

2

Tuesday, November 7th 2006, 6:52pm

Mit welcher Version von Visual Studio arbeitest du?
Sofern du im Resourceneditor nen PictureControl zur Auswahl hast setz das auf deinen Dialog und setz den Typ auf "geätzte Horizontale".
Fertig.
Ansonsten musst du nen Staticfeld mit dem Stil SS_ETCHEDHORZ erstellen.

Gruß void

3

Tuesday, November 7th 2006, 7:46pm

Hallo void.
Ich benutze Visual C++ 6.0.
Werde das morgen mal ausprobieren.

Wenn man ein Menu oder Kontextmenu erstellt ist es ganz einfach eine
Trennlinie einzufügen. Das muss doch auch in einem Dialogfenster gehen.

allesc

4

Tuesday, November 7th 2006, 7:53pm

Visual C++ 6 kennt das Picture Control noch nicht(zumindest nicht das das du brauchst).
Die Linie ist wirklich nur nen Staticfeld mit dem SS_ETCHEDHORZ Stil.
Ich schreib nacher mal ne Spezialisierung von CStatic.

Gruß void

5

Tuesday, November 7th 2006, 11:56pm

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

6

Wednesday, November 8th 2006, 12:42pm

Hallo void.
Ein link zu code-projekt hat mir geholfen.
Da ich keinen Text in der Trennlinie haben will kann man
einfach einen Static Text nehmen.
Einfach die Alt Taste drücken und das Textfeld möglichst klein machen(schmal).
Eigenschaft vertieft einstellen.
Trozdem vielen Dank für deine Hilfe.

allesc

Social bookmarks