Ir ao conteúdo

Posts recomendados

Postado

verifique esta classe:

class test
{
public:
    virtual void output()
    {
      MessageBox(NULL,"hello world", "hi", MB_OK);
    }
};

test t;

void t::output()
{
    MessageBox(NULL,"hello world 2", "hi", MB_OK);
}

o C++ , parece, nao permitir fazer 'void t::output()', se nao ter a declaraçao na classe.

em MFC ao criar objectos eu posso usar o operador scope resolution(::) para alterar 1 evento. em Code Blocks eu nao nao posso fazer eventos que usem o operador '::'. mas alguem me pode dar alguma dicas sobre isto?

Postado

pois mas 1 funçao virtual tem de ser declarada numa subclasse.

a minha ideia é mais simples do que pensas... eu quero usar '::' como fosse para programar os eventos. eu tenho 1 forma, mas é como variaveis e nao posso alterar 1 variavel na secçao Global.

eu posso te dar 1 codigo que queria que fosse valido, mas claro que iria ter alguns erros

Postado

see these sample:

class test
{
    public: EVENT void message()//eu usei 'EVENT'... o objectivo é como fosse para isso. ou 1 tipo de funáo que nao precisa de decalaraçao nos objectos, mas que possa se mudada de objecto para objecto
    {
        MessageBox(NULL, "hello world", "hi", MB_OK);
    }
};

test a;

void a::message()//como ves, esta funçao nao foi declarada no objecto 'a'
{
    MessageBox(NULL, "hello world", "hi 'a'", MB_OK);
}

eu sei que o C++ nao permite subscrever o operador Scope '::'... mas talvez possa fazer isto de forma diferente

Postado

como ves: de classe para classe temos de declarar a 'msg'.

mas ainda nao resolveu a minha questao :(

será que consigo ter acesso a 1 classe MFC?

(tenho VS98 instalado)

Postado

vê este exemplo:

afx_msg void OnDestroy();

fui o buscar: https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx#cwnd__onactivate

então fui pesquisar afx_msg: https://msdn.microsoft.com/en-us/library/aa235256(v=vs.60).aspx

mas não consigo entender :(

 

adicionado 56 minutos depois

desculpa mas ve outro exemplo:

class events
{
    public:  void click()
    {
        MessageBox(NULL, "click 1","hi", MB_OK);
    }
};

class a: public events{};

void a::click()
{
    MessageBox(NULL, "hello 1","hi", MB_OK);
}

erro: "no 'void a::click()' member function declared in class 'a'".

yah quer me obrigar a fazer 1 declaraçao na classe 'a'.... mesmo derivada da 'events'

Postado

nao encontro nd que me ajude alem:

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

ou

afx_msg void OnContextHelp(); 

ou

//CFrameWnd é o nome da classe

//{{AFX_MSG(CFrameWnd)
	// Windows messages
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnDestroy();
	afx_msg void OnClose();
	afx_msg void OnInitMenu(CMenu*);
	afx_msg void OnInitMenuPopup(CMenu*, UINT, BOOL);
	afx_msg void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
	afx_msg LRESULT OnPopMessageString(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnSetMessageString(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnHelpPromptAddr(WPARAM wParam, LPARAM lParam);
	afx_msg void OnIdleUpdateCmdUI();
	afx_msg void OnEnterIdle(UINT nWhy, CWnd* pWho);
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
	afx_msg BOOL OnNcActivate(BOOL bActive);
	afx_msg void OnSysCommand(UINT nID, LONG lParam);
	afx_msg BOOL OnQueryEndSession();
	afx_msg void OnEndSession(BOOL bEnding);
	afx_msg void OnDropFiles(HDROP hDropInfo);
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	afx_msg LRESULT OnCommandHelp(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnHelpHitTest(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnActivateTopLevel(WPARAM wParam, LPARAM lParam);
	afx_msg void OnEnable(BOOL bEnable);
	afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
	afx_msg BOOL OnQueryNewPalette();
	// standard commands
	afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnUpdateKeyIndicator(CCmdUI* pCmdUI);
	afx_msg void OnHelp();
	afx_msg void OnUpdateContextHelp(CCmdUI* pCmdUI);
	//}}AFX_MSG
protected:
	afx_msg LRESULT OnDDEInitiate(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnDDEExecute(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnDDETerminate(WPARAM wParam, LPARAM lParam);
	afx_msg LRESULT OnRegisteredMouseWheel(WPARAM wParam, LPARAM lParam);
	DECLARE_MESSAGE_MAP()

nao vejo nada util, porque nao temos as livrarias afx... mesmo assim penso que afx_msg é para gerar  mais codigo que nao vemos.

Postado
class events
{
    public:  void click()
    {
        MessageBox(NULL, "click 1","hi", MB_OK);
    }
};

class a: public events{};

void a::click()
{
    MessageBox(NULL, "hello 1","hi", MB_OK);
}

erro: a funçao 'click' nao esta declarada em 'a'. então imagina se 'a' é 1 objecto do events.... yah é aqui que esta o problema.

Postado

sim isso me irrita e muito. então imagina se 'B' fosse 1 objecto.. pior ainda.

estou a pensar numa coisa, mas para testar tenho de resolver 1 problema na instalação do VS6 no windows 7.

talvez, com 1 DLL, eu consiga transferir o 'afx_msg' do MFC para o C++... claro que é só 1 ideia.

Postado

ja consegui instalar o VS6. mas preciso de ajuda para criar 1 DLL que me permite usar os eventos:

// addin.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"


class test
{
	//{{AFX_MSG(test)
	// Windows messages
	afx_msg void hello();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP();

	
	
};

class test2: public test{};

void test2::hello()
{
	MessageBox(NULL,"hello world2", "hi", MB_OK);
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

eu nunca usei o afx, por isso tenho muitos erros.

podes me ajudar a resolver os erros?

(quero, no fim, usar a dll no GCC\GNU)

erro: "'afx_msg' : missing storage-class or type specifiers"

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...