Smazání obsahu okna Win32 API / C++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Smazání obsahu okna Win32 API / C++ – C / C++ – Fórum – Programujte.comSmazání obsahu okna Win32 API / C++ – C / C++ – Fórum – Programujte.com

 

10. 7. 2010   #1
-
0
-

Dobrý den,
před nedávnem jsem začal s C++ a WIN32 API ... avšak mám jeden zásadní problém. celý den hledám na internetu a už začínám mít na slovo "handle" alergii, ale svůj problém jsem furt nevyřešil... mám program, jedno okno, které má klasickou nabídku (soubor,atd) a ve svém těle má namalovanou při spuštění čáru. Já chci jenom aby,když otevřu nabídku soubor, kliknu na položku "nový" tak aby čára která je v těle okna aktuálně vymazala a namalovala jiná ... repsektive jde mi o to,jak okno donutit aby na nějakou určitou akci změnil jeho obsah.



#include <windows.h>

#define IDM_NEW 40001

LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT uZprava, WPARAM wParam, LPARAM lParam);

int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hInstancePredchozi,LPSTR lpCmdLine, int iCmdShow){

HWND hWnd;
TCHAR JmenoOkna[] = TEXT("Win32 API Zkouška");
MSG msg;
WNDCLASSEX wc;

wc.cbSize=sizeof(wc);
wc.style= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=ProceduraOkna;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=(HCURSOR)LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW);
wc.lpszMenuName="MAINMENU";
wc.lpszClassName=JmenoOkna;
wc.hIconSm=NULL;

RegisterClassEx(&wc);

hWnd = CreateWindowEx(
0,
JmenoOkna,
JmenoOkna,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

ShowWindow(hWnd, iCmdShow);

UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
};
return msg.wParam;


}

LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT uZprava, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT ps;
HDC hDC;
HMENU hMenu;
switch (uZprava){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
MoveToEx(hDC,10,10,NULL);
LineTo(hDC,100,100);
EndPaint(hWnd, &ps);
return 0;

case WM_COMMAND:

switch (LOWORD(wParam)){

case IDM_NEW:

SendMessage(hWnd,WM_PAINT,NULL,NULL);
hDC=BeginPaint(hWnd,&ps);
MoveToEx(hDC,10,10,NULL);
LineTo(hDC,150,150);
EndPaint(hWnd, &ps);
return 0;
};
};

return DefWindowProc(hWnd, uZprava, wParam, lParam);
};



Budu rád za všechny Vaše odpovědi.Děkuji

PS: v kódu je i něco to jak jsem se pokoušel problém vyřešit

Nahlásit jako SPAM
IP: 94.112.250.–
liborb
~ Redaktor
+18
Guru
10. 7. 2010   #2
-
0
-

A přitom handle je takové pěkné slovo :). Bez nich to prostě nejde. A teď z vážnější jamky, pokud jsem to dobře pochopil, tak tvůj problém se vyřeší úpravou reakce na WM_PAINT. Řekněme, že si založíš BOOL (globální) proměnnou, nastavíš ji po startu na FALSE. V reakci na událost v menu tuto globální proměnnou nastavíš na TRUE. V paint uděláš podmínku, že když FALSE, tak vykresli takovou čáru, a když TRUE, tak vykresli onakou. Jedná se o vykreslení na základě dat aplikace. Vykreslení je vždy na jednom místě (WM_PAINT) a mění se dle dat aplikace. Ještě do té reakce na menu budeš muset dát za změnu té proměnné InvalidateWindow, aby se vyvolalo překreslení.

Nahlásit jako SPAM
IP: 195.189.142.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 84 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý