[MFC] Je pige pas comment utiliser PostMessage

Je pige pas comment utiliser PostMessage [MFC] - Programmation

Marsh Posté le 09-07-2001 à 23:00:43    

J'ai fais une mini application qui affiche un texte et change de texte quand on appuie sur une touche du clavier.
 
Mais j'ai un problème avec la fonction PostMessage, je la mets dans ma fonction OnKeyDown() mais quand je lance mon appli ça marche pas.
 
 
#include <afxwin.h>
 
char buffer[256];
 
 
class CProg : public CWinApp
{
public:
 BOOL InitInstance();
};
 
 
class CWindow : public CFrameWnd
{
public:
 CWindow();
 
protected:
 afx_msg void OnPaint();
 afx_msg void OnKeyDown();
 
DECLARE_MESSAGE_MAP()
};
 
BEGIN_MESSAGE_MAP(CWindow, CFrameWnd)
 ON_WM_PAINT()
 ON_WM_KEYDOWN()
END_MESSAGE_MAP()
 
 
CProg lProg;
 
 
BOOL CProg::InitInstance()
{
 m_pMainWnd = new CWindow;
 m_pMainWnd->ShowWindow(m_nCmdShow);
 m_pMainWnd->UpdateWindow();
 
 return true;
}
 
 
CWindow::CWindow()
{
 Create( NULL,
  "MFC Project",
  WS_OVERLAPPEDWINDOW,
  CRect(0, 0, 800, 600));
 
 sprintf(buffer, "Hello World." );
}
 
 
void CWindow::OnPaint()
{
 CPaintDC dc(this);
 RECT rect;
 lProg.m_pMainWnd->GetClientRect(&rect);
 dc.DrawText(buffer, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
 
void CWindow::OnKeyDown()
{
 sprintf(buffer, "Une touche a été pressée." );
 PostMessage(WM_PAINT);
}

 

[edtdd]--Message édité par Alload--[/edtdd]

Reply

Marsh Posté le 09-07-2001 à 23:00:43   

Reply

Marsh Posté le 09-07-2001 à 23:22:28    

regarde du côté d'Invalidate() et le painting en général.

Reply

Marsh Posté le 09-07-2001 à 23:29:17    

Ca marche si j'utilise cette définition de la fonction OnKeyDown() de la class CWindow:
 
void CWindow::OnKeyDown()
{
 sprintf(buffer, "Une touche a été pressée." );
 RECT rect;
 lProg.m_pMainWnd->GetClientRect(&rect);
 InvalidateRect(&rect);
}
 
 
Mais n'y a-t-il pas moyen d'envoyer un message WM_PAINT qui sera traiter par la fonction OnPaint() de la class CWindow?

Reply

Marsh Posté le 09-07-2001 à 23:33:04    

:lol: heureusement que te dis de mater du côté d'Invalidate() ... :lol: :lol: :lol:
 
hehehe j'en peux plus c'est du délire ce soir :D

Reply

Marsh Posté le 09-07-2001 à 23:37:53    

Ah oui, ça aussi ça marche et c'est plus propre:
 
void CWindow::OnKeyDown()
{
 sprintf(buffer, "Une touche a été pressée." );
 lProg.m_pMainWnd->Invalidate();
}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed