Chaque exemple de code que j'ai vu est GetDC et releaseDC encore et encore. (ou BeginPaint/EndPaint) Mais je pense que l'écran de dessin se produit très fréquemment (surtout dans le jeu), les stocker dans la mémoire est préférable puis obtenir et libérer tout le temps. J'ai donc aimé garder globalDC comme global et l'utiliser, ne le relâchez qu'à la fin du programme. Mais pourquoi les gens ne font pas comme ça? (peut-être Obtenir/Libérer DC coûte très peu?)Win32API) Pourquoi devrais-je obtenir GetDC et ReleaseDC encore et encore?
case WM_CREATE:
hdc = GetDC(hWnd); //hdc is declared as global HDC
MyBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
return 0;
case WM_PAINT:
MemDC = CreateCompatibleDC(hdc);
OldBitmap = (HBITMAP)SelectObject(MemDC, MyBitmap);
BitBlt(hdc, 0, 0, 300, 300, MemDC, 0, 0, SRCCOPY);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
return 0;
* "Mais pourquoi les gens ne font pas comme ça?" * - Parce que tout est faux . Vous avez donc sauvegardé l'opération bon marché 'GetDC' uniquement pour appeler le coûteux sur chaque redraw (' CreateCompatibleDC'). Et puisque vous n'appelez jamais 'BeginPaint' /' EndPaint', la région invalide n'est jamais validée, provoquant la génération de messages 'WM_PAINT' continus, même quand il n'y a rien à dessiner. Vous devez apprendre comment cela fonctionne avant d'essayer d'optimiser. – IInspectable
Les gens ne le font pas comme ça parce que la documentation dit que vous ne pouvez pas. Les contrôleurs de domaine ne doivent pas être mis en cache comme ceci, à moins que vous ne preniez soin de créer votre classe de fenêtre avec les drapeaux appropriés, ce que vous ne devriez pas faire. Les contrôleurs de domaine sont conçus pour être des objets temporaires, créés uniquement lorsque cela est nécessaire et éliminés immédiatement après. Récupération d'un DC avec 'GetDC' est assez bon marché que cela a bien fonctionné sur 286 processeurs. Il est * garanti * d'être assez rapide sur le silicium que vous utilisez actuellement. –
@CodyGray Wow ma curiosité juste époustouflé! Merci à tous pour votre réponse. – JokyDandy