title bar (schon wieder)
-
hallo liebe api gemeinde,
auch ich habe mich mal daran versucht die title bar zu überschreiben.
hier das ergebnis:
das "tue was in WM_NCPAINT" führt in diesem programm nicht zum gewüschten Erfolg.
wenn das title fenster verdeckt wurde, kommt die "original title-bar" wieder zum Vorschein.
ich poste mal den gesamten (kompilierfähigen) code hierein:#include <windows.h>
/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);/* Make the class name into a global variable */
int WINAPI
WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil){
HWND hwnd; /* This is the handle for our window /
MSG messages; / Here messages to the application are saved /
WNDCLASSEX wincl; / Data structure for the windowclass *//* The Window structure /
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; / This function is called by windows /
wincl.style = CS_DBLCLKS; / Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);/* Use default icon and mouse-pointer /
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; / No menu /
wincl.cbClsExtra = 0; / No extra bytes after the window class /
wincl.cbWndExtra = 0; / structure or the window instance */
/* Use Windows's default color as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation /
szClassName, / Classname /
"Windows App", / Title Text /
WS_OVERLAPPEDWINDOW, / default window /
CW_USEDEFAULT, / Windows decides the position /
CW_USEDEFAULT, / where the window ends up on the screen /
544, / The programs width /
375, / and height in pixels /
HWND_DESKTOP, / The window is a child-window to desktop /
NULL, / No menu /
hThisInstance, / Program Instance handler /
NULL / No Window Creation data */
);/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}/* This function is called by the Windows function DispatchMessage() */
LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC hdc;
PAINTSTRUCT ps;
HPEN hPen;
switch (message) /* handle the messages /
{
case WM_DESTROY:
PostQuitMessage (0); / send a WM_QUIT to the message queue */
break;case WM_NCPAINT:
hdc = GetWindowDC (hwnd);
SelectObject(hdc, GetStockObject(5));
TextOut(hdc,5,5,"Dummytext123",12);
hPen = CreatePen(PS_SOLID, 0, RGB(0,255,0));
SelectObject(hdc, hPen);
//aufräumen
DeleteObject(hPen);
ReleaseDC(hwnd, hdc);
return (0);
//break;default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}return 0;
}gibt's ne Lösung
schönen tach(nacht) noch
ts
-
gut beschrieben dein code...
-
wer auch immer das geschrieben hat, es läuft nicht ... unter win2k hast du immer irgendwelche fetzen anderer fenster in der title-bar, wenn man sie rübergezogen hat.
ne lösung ?
erstelle ein fenster ohne title-bar, kopiere wann immer nötig einen hdc mittels double-buffering an die stelle der title-bar und für die kleinen schalter (min, max,close) machste eine mausabfrage - mit subclassing kann man das alles schön in einer klasse verstauen. fertig is ...
rocknix ///