/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Problemer med vindue
Fra : Klaus Petersen


Dato : 17-11-02 15:28

Hej NG.

Jeg har lavet et fint lille vindue med CreateWindow (winapi) og det virker
da også fint bortset fra 2 ting:

1) Når man flytter markøren over det, bliver den til en "flyt vindue" markør
(pil med et flytte kryds ved siden af). Vinduet hænger fast på et andet
vindue og har hverken kanter, titelbar, systemmenu, caption... har ingenting
... og er foriøvrigt også ret lille - 275 x 30 pixels.

2) Når man flytter vinduet ud af venstre kant (dvs. x < 0), virker koden i
min WM_PAINT ikke længere...

Kan nogen hjælpe mig her? (håber i overlever at koden ikke står så pænt)

--- Kode - Initialisering af vinduet ---

HWND init_window (HINSTANCE hInstance, HWND hwndParent, int nCmdShow, int x,
int y, int sizeX, int sizeY ) {
WNDCLASSEX wc; // Indstillinger for vindue
HWND mainWindow;
wc.cbSize = sizeof (WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) mainwindow_proc;
wc.cbClsExtra = 0;
wc.cbWndExtra = sizeof (DWORD);
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hIconSm = NULL;
//Skriv:
// (HICON)LoadImage(hInstance, (LPCTSTR)IDI_M2A, IMAGE_ICON, 0,0,0);
// for at hente ikon
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
// Her kunne også stå (HBRUSH) GetStockObject (BLACK_BRUSH);
// som ville give et sort vindue
wc.lpszMenuName = NULL;
wc.lpszClassName = mainClass;
// Forsøg at registrere vinduet
if (!RegisterClassEx (&wc)) {
return NULL; /* failed */
}

// Gik godt. Forsøg at oprette et nyt vindue:
// Windue Styles:
// WS_OVERLAPPEDWINDOW:
// Helt alm. vindue
// WS_POPUPWINDOW:
// Vindue uden kanter
// Kanter kan opnåes WS_POPUPWINDOW && WS_BORDER
//
mainWindow = CreateWindow (
mainClass, // vinduets class
"", // vinduets titel
0 , // vinduets egenskaber
x, y, // X,Y postion
sizeX, sizeY, // Bredde/Højde
hwndParent, // Parent/forældre vindue
NULL, // Menu
hInstance, // Instansen vi tilhører
NULL);
if (!mainWindow) { // failed
return NULL;
}
ShowWindow (mainWindow, nCmdShow); // skift show-mode på vinduet
//UpdateWindow (mainWindow); // tegn vinduet nu!
return mainWindow;
}

////////////////////////////////////////////// --- kald til initwindow ---
//////////////////////////////////////////////

handle = init_window ( wgpPlugin->hDllInstance, wgpPlugin->hwndParent,
SW_NORMAL, 0, 0, 275, 30 );

////////////////////////////////////////////// --- min WM_PAINT ---
//////////////////////////////////////////////

LRESULT CALLBACK mainwindow_proc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam) // second message parameter
{
PAINTSTRUCT paint;
HDC dc;
HDC memDC;
HBITMAP old;
RECT rect;
int bredde;
switch (uMsg) {
case WM_PAINT:
GetWindowRect ( hwnd, &rect );
bredde = rect.right - rect.left;
dc = BeginPaint ( hwnd, &paint );
memDC = CreateCompatibleDC ( dc );
old = (HBITMAP) SelectObject( memDC, plugin->getBmMainWindow() );
BitBlt (dc, 0, 0, 275, 30, memDC, 0, 0, SRCCOPY);
EndPaint ( hwnd, &paint );
SelectObject ( memDC, old );
DeleteObject ( old );
ReleaseDC ( hwnd, dc);
return TRUE;
};
return TRUE;
};



 
 
Klaus Petersen (17-11-2002)
Kommentar
Fra : Klaus Petersen


Dato : 17-11-02 15:34

> 1) Når man flytter markøren over det, bliver den til en "flyt vindue"
markør
> (pil med et flytte kryds ved siden af). Vinduet hænger.....

Jeg skal nu nok lige sige, at det der er i vejen er altså, at markøren
skifter væk fra den normale pil.
Alt det andet er fint nok.



Klaus Petersen (18-11-2002)
Kommentar
Fra : Klaus Petersen


Dato : 18-11-02 06:08

Problemet blev løst.

Fejl 1 skyldtes at vinduet blev flyttet til ugyldige koordinater et helt
andet sted i programmet og fejl 2, at jeg manglede at håndtere WM_SETCURSOR
meddelser.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste