Wednesday, 21. June 2006Grid control für Win32
Die Standard WIN32-Forms und Common Controls sind ansich sehr praktisch, um benutzerfreundliche Forms anzulegen. Allerdings besitzen sie von Haus aus keine Funktionalität für Grids, wie diese z.B. von Excel her bekannt sind. Nun gibt es zwar zahlreiche Implementierungen von Grids im Internet (die meisten funktionieren mit Hilfe eines ListView-Controls), diese basieren jedoch leider zumeist auf der MFC, sodass hier wieder unnötiger Overhead entsteht. Was aber macht der normale Win32-API Programmierer in diesem Fall? Erst nach langem Suchen bin ich über den Artikel Win32 Grid Control with Low Overhead (BABYGRID) auf codeguru.com gestoßen, welcher eine Implementierung mittels normaler WIN32-API zeigt. Mit ein paar kleinen Fixes lässt sich der Code auf C portieren (es werden leider standardmäßig einige C++ Features verwendet, das Ganze lässt sich jedoch sehr einfach reparieren. Bei Interesse an dem korrigierten Code einfach einen Kommentar hinterlassen). Praktischerweise wird das Control zur Gänze selbst gezeichnet, sodass man auch leicht auf die Optik des Controls Einfluss nehmen kann. Ich habe beispielsweise erfolgreich ein Sudoku-Lösungsprogramm damit realisiert.
Friday, 16. June 2006Microsoft Patch KB914784 Für Win64 problematisch
Der Patch KB914784 von Microsoft fügt zusätzliche sicherheitsfunktoinen in den Kernel ein, die eine Modifikation der internen Strukturen verhindern soll. Leider basieren viele Programme auf Techniken dieser art, sodass diese nach der Installation des Updates nicht mehr funktionieren. Beispielsweise ist das populäre Programm Daemon Tools betroffen (siehe Forumbeitrag). Von der Installation dieses Patches wird daher abgeraten.
Generell verursachen neue Sicherheitsfeatures von Windows oft ziemliche Probleme, sodass diese mit vorsicht zu genießen sind (vgl. Beitrag DEP unter Windows XP SP2 und 16bit Applikationen). Auch hier habe ich heute ein weiteres Programm gefunden, welches im Zusammenhang mit der DEP nicht mehr korrekt funktioniert. Für Microsoft ist es natürlich eine schwierige Entscheidung, einerseits ihr Betriebssystem sicherer zu machen und andererseits die Kompatibilität mit bestehenden Applikationen nicht zu brechen... Thursday, 1. June 2006Tab controls verwenden
Unter Windows gibt es die Möglichkeit, sogenannte Tab controls zu verwenden. Diese sind zum Beispiel für Eigenschaftsseiten ganz praktisch, um mehrere Optionen übersichtlich darstellen zu können.
Gleich vorweg: Windows bietet hierfür eigene Funktionen für Eigenschaftsseiten an, die verwendet werden können: MSDN - PropertySheets Allerdings kann es auc hganz interessant sein, so etwas selbst nachzubauen, vor Allem, wenn man eigentlich keine richtigen Eigenschaftsseiten benötigt: Nachdem das Tab-Control selbst nur Notifications sendet, wenn ein entsprechender Tab angeklickt wird, muss man die Verwaltungs der den Tabs zugehörigen Controls selbst übernehmen. Eine Möglichkeit wäre, alle Controls der jeweiligen Tabs in den Dialog zu geben und von der Nummerierung her so zu wählen, dass immer ein gewisser Bereich an Controls aktiviert, und der Rest beim Wechsel deaktiviert wird. Dies ist jedoch sehr aufwendig zu implementieren und außerdem endet man schnell in einem Kuddelmuddel an Controls. Einfacher ist es, für jede Tab-Seite einen eigenen Child Dialog zu generieren, der dann entsprechend angezeigt wird. Ich habe hierzu etwas generischen Code geschrieben, um zu verdeutlichen, wie dies funktioniert: Zuerst muss das Hauptfenster mit dem Tab Control erstellt werden, welches die anzuzeigenden Subfenster beinhaltet. Auf diesem wird ein Tab-Control mit der ID IDC_TABS erstellt. Ihm wird die unten gezeigte Window Procedure zugeordnet.Danach müssen die entsprechenden Client-Fenster erstellt werden, welche die Styles WS_CHILD | WS_EX_CONTROLPARENT gesetzt haben, da sie ja childfenster sind. Im Ressource Editor hierfür einfach die Häkchen Stile / Untergeordnet, Rand / Keine und Erweiterte Formate / Übergeordnete steuern wählen.Hier nun der code der WndProc für das Tab-Fenster. In das Arrray uDialogs einfach alle Dialoge, die zum Tab gehören eintragen. In pszTitles die zugehörigen Tital, die auf den Tabs erscheinen sollen und in procDialogs kann man schließlich die jeweiligen zugehörigen Window procedures setzen.Alles unklar? Bei Fragen wie immer einfach comment hinterlassen.
(Seite 1 von 1, insgesamt 3 Einträge)
|
SucheBlog abonnierenTop ReferrerVerwaltung des Blog |