000
13.03.2007, 12:48 Uhr
me-S-on
|
Hallo. Ich bin auf dieses Forum gestossen, weil ich so etwas mit der WinApi rumspiele und , wie es sicher den meisten geht, habe ich ein kleines Problem mit der Nachrichtensteuerung: Mir fällt ainfach keine Lösung hierzu ein, daher hoffe ich hier auf ein einige Tipps ( und ich denke, ich habe nur was banales übersehen.........) Kurze beschreibung: Ein Fenster, parent, mit zwei Knöpfen und einem Edit, children, ABER NUR einer Nachrichtenfunktion, welche anhand des (HMENU) die Herkunft selektiert. Der erste Knopf soll beim Klicken die Hintergundfarbe des Fensters ändern, die BkColor der Caption auch. Allerdings klappt es ( die Stelle ist im Q-C markiert) einfach nicht: Bitte sehr, der Post des Q-C.
Code: |
/* parent and children- windows: on a click the bg.color shall be changed */ #define STRICT #include<windows.h> #include<time.h> #include<stdlib.h> //-- preprocesing--------------------------------------------------------------- LRESULT CALLBACK MessFunc(HWND,UINT,WPARAM,LPARAM); const char szPaNa[] = "The parent window";
//-- global funcs and vars------------------------------------------------------ int WINAPI WinMain(HINSTANCE hiact,HINSTANCE hiprev,LPSTR cmdline,int showhow) { MSG mess; WNDCLASS wcx; HWND hparentw; wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hiact; wcx.lpfnWndProc = MessFunc; wcx.lpszClassName = szPaNa; wcx.lpszMenuName = NULL; wcx.hIcon = LoadIcon(NULL,IDI_EXCLAMATION); wcx.hCursor = LoadCursor(NULL,IDC_ARROW); wcx.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(120,140,200)); if(!RegisterClass(&wcx)) { MessageBox(NULL,"Registration failed", "Error occured",MB_OK); return 0; } hparentw = CreateWindow(szPaNa,"Fucking parent window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,300,300, NULL, NULL, hiact, NULL ); ShowWindow(hparentw,showhow); UpdateWindow(hparentw); while(GetMessage(&mess,NULL,0,0)>0) { TranslateMessage(&mess); DispatchMessage(&mess); } return mess.wParam; } LRESULT CALLBACK MessFunc(HWND mwinhan,UINT mcode, WPARAM wm_Wflags,LPARAM wm_Lflags) { RECT clrect; GetClientRect(mwinhan,&clrect); switch(mcode) { case WM_SIZE: { //SendMessage(mwinhan,WM_CREATE,wm_Wflags); break; } case WM_CREATE: { HWND hchildb1 = CreateWindow("button","\"COLOR\"", WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON, clrect.right/4-35,clrect.bottom/3, 70, 30, mwinhan, (HMENU)2, (HINSTANCE)GetWindowLong(mwinhan,GWL_HINSTANCE), NULL ); HWND hchildb2 = CreateWindow("button","\"B/W\"", WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON, clrect.right/2+35,clrect.bottom/3, 70, 30, mwinhan, (HMENU)3, (HINSTANCE)GetWindowLong(mwinhan,GWL_HINSTANCE), NULL ); HWND hchilde1 = CreateWindow("edit","", WS_CHILD | WS_VISIBLE | ES_MULTILINE, clrect.right/4-35,clrect.bottom/2,(clrect.right/2+clrect.right/4)-6,100, mwinhan, (HMENU)4, (HINSTANCE)GetWindowLong(mwinhan,GWL_HINSTANCE), NULL ); break; } case WM_COMMAND: { case WM_LBUTTONDOWN: { switch (LOWORD(wm_Wflags)) { case 2: { int irgb[] = {rand()%255,rand()%255,rand()%255}; char crgb[2]; HDC hdevcon; HBRUSH sbuff = (HBRUSH)SelectObject(hdevcon,CreateSolidBrush(RGB(irgb[0],irgb[1],irgb[2]))); SendMessage(mwinhan,WM_PAINT,wm_Wflags,NULL); DeleteObject(sbuff); break; } case 3: { MessageBox(NULL,"FUCK","YOU 2",MB_OK); break; } break; } break; } break; } case WM_PAINT: { const char szinfo[] = "Two button-children"; HDC hdevcon; PAINTSTRUCT paintinfo; hdevcon = BeginPaint(mwinhan,&paintinfo); SetBkMode(hdevcon,RGB(120,140,200)); TextOut(hdevcon,clrect.right/4,clrect.bottom/8,szinfo,strlen(szinfo)); InvalidateRect(mwinhan,&clrect,TRUE); EndPaint( mwinhan,&paintinfo); break; } case WM_DESTROY: { PostQuitMessage(0); break; } return 0; } return DefWindowProc(mwinhan,mcode,wm_Wflags,wm_Lflags); }
|
-- - Bonus vir semper tiro - Dieser Post wurde am 13.03.2007 um 12:49 Uhr von me-S-on editiert. |