begin process at 2012 02 11 23:13:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Graphique

 > 

animer un graphisme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

animer un graphisme

samedi 22 mars 2003 à 13:40:21 | animer un graphisme

GreatNeo

Je crée par exemple une ligne. Est-il possible de la déplacer ? faut-il la transformer en bitmap ? (si oui quelle est la fonction pour le faire ?)
Je voudrai savoir aussi comment faire pour garder le contenu paint dans une fenêtre, c'est-à-dire que celui-ci ne s'efface pas quand on passe une autre fenêtre par dessus ou qu'on la réduit/agrandi ?
Merci d'avance.
samedi 22 mars 2003 à 14:02:56 | Re : animer un graphisme

BruNews

Administrateur CodeS-SourceS
Exemple complet pour 1ere question:
#include <windows.h>

HINSTANCE hInst;
HWND m_hBand;
RECT rct;

int posX, posY;
int heightFnt;
HBITMAP hbmp;
HDC memDc;

char *szAppName = "Bandeau", *szBand = "bndCls";
char *szMail = "Auteur: BruNews - Email: bnutiles@wanadoo.fr";

LRESULT CALLBACK BandWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_CREATE:
{
TEXTMETRIC tm;
SIZE size;
HDC hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm); heightFnt = tm.tmHeight;
int len = strlen(szMail);
memDc = CreateCompatibleDC(hdc);
GetTextExtentPoint32(hdc, szMail, len, &size);
GetClientRect(hwnd, &rct);
size.cx += 50;
if(rct.right < size.cx) rct.right = size.cx;
hbmp = CreateCompatibleBitmap(hdc, rct.right, rct.bottom);
SelectObject(memDc, hbmp);
SelectObject(memDc, GetStockObject(LTGRAY_BRUSH));
PatBlt(memDc, 0, 0, rct.right, rct.bottom, PATCOPY);
posY = rct.bottom / 2 - heightFnt / 2;
SetBkMode(memDc, TRANSPARENT);
TextOut(memDc, 20, posY, szMail, len);
ReleaseDC(hwnd, hdc);
InvalidateRect(hwnd, 0, 1);
SetTimer(hwnd, 1, 20, 0);
}
return 0;
case WM_TIMER:
{
int tmaxX = rct.right - 1;
BitBlt(memDc, tmaxX, posY, 1, heightFnt, memDc, 0, posY, SRCCOPY);
BitBlt(memDc, 0, posY, tmaxX, heightFnt, memDc, 1, posY, SRCCOPY);
InvalidateRect(hwnd, &rct, 0);
}
return 0;
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left, ps.rcPaint.bottom - ps.rcPaint.top,
memDc, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY);
EndPaint(hwnd, &ps);
}
return 0;
case WM_DESTROY:
KillTimer(hwnd, 1);
DeleteDC(memDc);
return 0;
}
return DefWindowProc(hwnd, mssg, wParam, lParam);
}

LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_SIZE:
rct.bottom = HIWORD(lParam) / 2;
m_hBand = CreateWindow(szBand, 0, WS_CHILDWINDOW | WS_VISIBLE,
0, rct.bottom / 2, LOWORD(lParam), rct.bottom,
hwnd, 0, hInst, NULL);
return 0;
case WM_SYSCOMMAND:
if((wParam==SC_SCREENSAVE)) return 0; // interdit SCREENSAVE
break;
case WM_CHAR:
if(wParam == VK_ESCAPE) PostMessage(hwnd, WM_CLOSE, 0, 0l);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, mssg, wParam, lParam);
}

HWND PrepareWndApp()
{
WNDCLASSEX wclsx;
wclsx.cbSize = sizeof(WNDCLASSEX);
wclsx.style = CS_HREDRAW | CS_VREDRAW;
wclsx.hCursor = LoadCursor(NULL, IDC_ARROW);
wclsx.hInstance = hInst;
wclsx.cbClsExtra = wclsx.cbWndExtra = 0;
wclsx.hIconSm = 0; wclsx.lpszMenuName = 0;
wclsx.hIcon = LoadIcon(hInst, szAppName);
wclsx.lpfnWndProc = AppWndProc;
wclsx.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
wclsx.lpszClassName = szAppName;
if(!RegisterClassEx(&wclsx)) goto errWndApp;
wclsx.hIcon = 0;
wclsx.style = CS_HREDRAW | CS_VREDRAW;
wclsx.lpfnWndProc = BandWndProc;
wclsx.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
wclsx.lpszClassName = szBand;
if(!RegisterClassEx(&wclsx)) goto errWndApp;
return CreateWindowEx(0, szAppName, szAppName,
WS_OVERLAPPED | WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInst, NULL);
errWndApp:
MessageBox(NULL, "ERREUR", szAppName, MB_ICONERROR); return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
MSG msg;
HWND hwApp;
hInst = hInstance;
if(!(hwApp = PrepareWndApp())) return 0;
ShowWindow(hwApp, SW_SHOW); UpdateWindow(hwApp);
while(GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
tu peux recompiler. Tu auras un bandeau texte deroulant et permanent sans scintillement.
2) Si WM_PAINT traite comme il se doit l'affichage n'est pas altere par deplacement.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Je crée par exemple une ligne. Est-il possible de la déplacer ? faut-il la transformer en bitmap ? (si oui quelle est la fonction pour le faire ?)
> Je voudrai savoir aussi comment faire pour garder le contenu paint dans une fenêtre, c'est-à-dire que celui-ci ne s'efface pas quand on passe une autre fenêtre par dessus ou qu'on la réduit/agrandi ?
> Merci d'avance.


Cette discussion est classée dans : fenêtre, animer, graphisme


Répondre à ce message

Sujets en rapport avec ce message

appeler une autre fenêtre [ par harbat ] comment puis-je appeler un autre formulaire en utilisant le visual C++(j'utilise les MFC)merci de me répondre a la question le plutot possible Effaçage de fenêtre [ par denis28 ] Comment effacer le contenu d'une fenêtre win32 avec visual c++? Je cherche l'équivalent du clrscr() du mode console.Merci création de fenêtre enfant [ par polykos ] quelqu'un saurait me dire pour quoi lorsque avec CreateWindow, j'indique en tant que style WS_CHILD, j'obtiens une feêtre enfant mais inactive ???!! Comment afficher du texte dans un fenêtre OpenGl?? [ par mastave ] Comment afficher du texte dans un fenêtre OpenGl??Et avec un police spéciale?? Fenêtre windows... [ par ELECTRORESiSTiK ] Salut,Je suis debutant en Visual C++ et je n'arrive pas à créer ce que je veux faire...Je voudrais créer une fenêtre windows ( Form ) avec 2 edit box Créer un lien sous fenêtre windows [ par JMGR ] Comment peut - on créer un lien vers un site sous une fenêtre Windows ?(avec les MFC par ex.)a+ Fenêtre pas carrée ... [ par Ostrogoth22 ] Comment créer une fenètre de forme ronde , ou n'importe quelle formeEG : la fenetre d'intro de icq, ou copernic .. inserer une fenêtre opengl dans une autre fenetre [ par 20100 ] je cherche à inserer un programme que j'ai fait avec opengl dans une fenêtre windows classique(avec des boutons ...)pour l'instant tout marche mais da Rafraichissement des dialog [ par JeriKo ] salut a tous,j'ai fait un prog avec boite de dialogue, le probleme etant que j'ai une boucle et du coup faut rafraichir la fenetre pour pouvoir utilis maximizer une fenêtre à l'ouverture [ par inertia ] salut,j'utilise visual C++ 6 & les MFC depuis peu. avec AppWizard j'ai crée une application MDI. J'ai réussi à maximizer la fenêtre principale à l'ouv


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales