Ir ao conteúdo
  • Cadastre-se

Cambalinho

Membro Pleno
  • Posts

    942
  • Cadastrado em

  • Última visita

Tudo que Cambalinho postou

  1. sim sabes porque? olha isto: Menu menu1, menu2, menu3("oi",menu2), menu4("hello",menu2); o resto é só propriedades amigo. então nao usavas? nao sei de destes conta: mas objecto do Menu cria o menu e mostra-o. o menu3 e menu4 indico(2º parametro) o sitio onde vão ficar amigo
  2. imagina isto: 1 - crias 1 objecto do menu; 2 - esse objecto pode alterar a opções do menu(texto, atalhos, cor de texto e muito mais); 3 - esse objecto, com lambdas, podes fazer os 'eventos'. quero inserir tudo nessa class. mas a parte dos 'eventos' esta complicada ('eventos' - falo das mensagens) PS: para fazer 1 form e mostrar, só preciso de criar 1 variavel do tipo form. nao é simplificado? PS: posso ocultar a cor de fundo do form, permitindo as formas do form. nao é simplificado?
  3. eu entendi a tua sugestao do MFC e eu ja dei conta dessa linguagem complicada.. eu prefiro simplificar as minhas cenas mas tenho de ver como vou corrigir aquele erro o problema é os menus usarem HMENU em vez de HWND. senao estava resolvido de outra forma
  4. esquece o MFC lol sim eu posso alterar isso. mas estou a usar essa mensagem porque modifiquei os menus para isso eu quero meter o processamento das mensagens na class
  5. sim. tenho tudo numa class form. e mais 1 procedimento para o loop das mensagens. o erro que tenho é mesmo com SetWindowLong(), porque chama o MenuSubclassProc() mas nao volta ao procedimento de mensagens do form. outra coisa: MainHWND é o HWND do form, penso que isto esta errado tambem. mas aceito ideias
  6. eu estou a criar 1 class menu mas com algum problemas com o ciclo de mensagens class Menu{private: static int intID; int ID=0; bool primeiromenu=false; HMENU MenuHandle=NULL; HMENU hMenu=NULL; int menuposition=0; string strCaption=""; static LRESULT CALLBACK MenuSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { Menu *wnd = 0; // retrieve associated Window instance wnd = reinterpret_cast<Menu *>(GetWindowLong(hwnd, GWL_USERDATA)); if(uMsg==WM_MENUCOMMAND) wnd->MenuClick(); return DefWindowProc(hwnd, uMsg, wParam, lParam); } public: event(MenuClick) = []() {;}; Menu(string caption="&Menu",HMENU subtmenu=NULL, HWND MainHWND=WindowMain) { intID=intID+1; ID=intID; if(caption!="-") caption=(string)caption + " " + to_string(ID); strCaption=caption; if(GetMenu(MainHWND)==NULL) hMenu = CreateMenu(); else hMenu =GetMenu(MainHWND); if (subtmenu==NULL) { HMENU hSubMenu=CreatePopupMenu() ; AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, caption.c_str()); MenuHandle=hSubMenu;//my error was here SetMenu(MainHWND, hMenu); menuposition=GetMenuItemCount(hMenu)-1; primeiromenu=true; } else { if(caption=="-") AppendMenu(subtmenu, MF_SEPARATOR, ID, caption.c_str()); else AppendMenu(subtmenu, MF_STRING, ID, caption.c_str()); MenuHandle=subtmenu; menuposition=GetMenuItemCount(subtmenu)-1; SetMenu(MainHWND, hMenu); } MENUINFO mi; mi.cbSize=sizeof(MENUINFO ); if(primeiromenu==true) SetMenuInfo(GetMenu(WindowMain),&mi); else GetMenuInfo(MenuHandle,&mi); mi.fMask=MIM_STYLE; mi.dwStyle =MNS_NOTIFYBYPOS; if(primeiromenu==true) SetMenuInfo(GetMenu(WindowMain),&mi); else SetMenuInfo(MenuHandle,&mi); SetWindowLong(MainHWND,GWL_WNDPROC,(LONG)MenuSubclassProc); SetWindowLong(MainHWND,GWL_USERDATA,(LONG)this); } void Show(HWND mainshowed) { LPPOINT x; GetCursorPos(x); SetForegroundWindow(mainshowed); TrackPopupMenu(MenuHandle,NULL,x->x,x->y,0,mainshowed,NULL); PostMessage(mainshowed, WM_NULL, 0, 0); } int getmenuposition() { return menuposition; } property<string> Caption { Get(string) { return strCaption; }, Set(string text) { MENUITEMINFO mi; mi.cbSize=sizeof(MENUITEMINFO); if(primeiromenu==true) GetMenuItemInfo(GetMenu(WindowMain),menuposition,true,&mi); else GetMenuItemInfo(MenuHandle,menuposition,true,&mi); mi.fMask=MIIM_STRING; mi.dwTypeData =(LPTSTR)text.c_str(); if(primeiromenu==true) SetMenuItemInfo(GetMenu(WindowMain),menuposition,true,&mi); else SetMenuItemInfo(MenuHandle,menuposition,true,&mi); } }; operator int() { return ID; } operator HMENU() { return MenuHandle; } void Destroy() { DestroyMenu(MenuHandle); }};int Menu::intID=0;//no procedimento das mensagens do form tenho:case WM_MENUCOMMAND: { SendMessage((HWND)lParam , WM_COMMAND, wParam, lParam); } break; case WM_COMMAND: { SendMessage((HWND)lParam , WM_COMMAND, wParam, lParam); } break; o problema é que o procedimento do menu nao retorna ao do form alguem me pode explicar o que estou fazendo mal?
  7. se calhar vou pedir 1 amigo e perder amor a 30€
  8. se calhar vou pedir 1 amigo e perder amor a 30€
  9. por acidente, eliminei a pratiçao do disco externo ao criar a partiçao tive que o formatar. como posso recuparar a informaçao no proprio disco? (eu tenho programas para recuperar a informaçao, mas nao tenho outro disco de 500GB's livres )
  10. muito obrigado muito obrigado amigo por alguma razao voltei a ter os bonecos no chat(activou o java). o sfc /scannow detectou 1 erro e reparou muito obrigado e estava a fazer outras cenas enquanto fazia o scandisk e depois o sfc /scannow
  11. para isso tenho de usar o disco como disco externo ou pen do windows xp, mas nao tenho material para isso
  12. ao instalar o 7, formato o pc.. mas nao me lembro de ter a opção rapida ou exaustiva. por isso achas que devo formatar á parte?
  13. muito obrigado mas apercebi-me que o sistema operativo esta muito marado e vou formata-lo. muito obrigado mesmo
  14. ja descubri que é o java que me esta a dar problemas, mas é o recente. o que me podem sobre resolver estes conflitos?
  15. moderador: desculpa mas nao achei o subforum mais correcto estou super desanimado com o meu chrome(ate podia ser firefox ou internet explorer), num site nao me mostra os bonecos do chat e nao consigo entender o porque. e parece eu ser o unico a ter o problema(que dor de cabeça ) ja desinstalei o chrome, reiniciei e voltei a instalar. mas o problema continua. ja passei o ccleaner(limpezas) e o limpeza do windows e o problema continua. eu só notei problemas após eles mudarem de servidor. mas mesmo assim consegui os bonecos do chat ate hoje de manha. apos alguns minutos de entrar no chat perdi completamente os bonecos alguem me explicar se estou-me a esquecer de alguma coisa? eu ja tentei tudo o que sei(excepto formatar) e nao resolvi o problema (se for preciso 1 print screen eu faço)
  16. eu criei a class property... fiz algumas class com propriedades(membros da property). quando uso objectos dessa class, porque os objectos da property nao aparecem na lista(Intelegence list)?
  17. eu estou a criar 1 variavel do tipo Graphics numa class: class image{private: ULONG_PTR m_gdiplusToken; Gdiplus::GdiplusStartupInput gdiplusStartupInput; HDC hdcimage=CreateCompatibleDC(NULL); Gdiplus::Graphics graphic(hdcimage); mas recebo 1 erro: " 'hdcimage' is not a type" porque o erro?
  18. (desculpa moderador, mas nao sei o sub-forum mais indicado para esta pergunta) como posso carregar 1 biblioteca em Code Blocks? quando escrevo: Gdiplus:://ougraphics.//1 objecto da Graphics a lista de membros nao é mostrada. como posso resolver isso?
  19. muito obrigado a todos. eu fiz aquela macro para ser mais especifico e evitar os argumentos da template eu podia fazer 1 class event, mas ficava com o mesmo 'problema': tinha que meter os argumentos da template.. por isso a macro (ontem nao respondi, porque nao consegui entrar no forum )
  20. porque quando fazemos 1 funçao template, quando a usar-mos, nao nos preocupamos com os argumentos entre '<>', mas em class temos que o fazer? template < typename T>void foobar (T arg1, T arg2){ // Código relevante aqui, como de praxe. // A única diferença é que você pode tratar T como se fosse um tipo.} quando usamos a funçao: foobar(3,5);//oufoobar("hello","bye"); (a funçao nao faz nada, mas é para mostrar a forma de utilizaçao) mas nas classes: template<typename T>class test{ public: test(T nome) { }};//usartest<string> test("joaquim); volto a perguntar: se com funçoes nao preciso usar '<tipos>', porque o tenho de o fazer com as classes?
  21. eu fiz esta macro: #define event(eventname, ... ) std::function<void(__VA_ARGS__ )> eventname mas os programadores estão sempre a pedir para evitar macros, mas esta nao me dá problemas. alguem pode explicar melhor sobre evitar macros?
  22. desculpa, mas isso é o mesmo que o site do MSDN o que precisava(depois de tanto esforço) era o layout do joystick: https://onedrive.live.com/?cid=C3EF456E15C8DEB6&id=C3EF456E15C8DEB6!1259&v=3 o Hat é o POV. para ser activado o LED do Analog tem de estar a vermelho. outra coisa, eu tenho os pontos X,Y e 1 centro C... como posso obter a angulo com estes dados? eu tenho esta formula, mas estou a obter resultados incorrectos inst->Text=to_string((int)atan2((b.dwXpos-32511),(b.dwYpos-32511))*(180/PI)); a frase é imprimida... mas o resultado esta incorrecto eu estou a usar esta formula: result = atan2 (y-c,x-c) * 180 / PI; por favor me digam se estou errado (observaçao eu obtenho só 2 diferentes valores)
  23. o portatil é 1 Toshiba Satellite com Windows 7. após 1 formaçao e resinstalaçao do SO, o SO bloqueia(nem o rato se move) durante minutos e é quando calha(é aleatorio acontecer) e depois volta ao normal. alguem me pode explicar alguma coisa?
  24. existem alguns conceitos\definiçoes\caracteristicas do joystick que nao sei e gostava de saber. - sabem aqueles 2 butoes que funcionam em modo circular? como se chamam estes butoes? eis a estrutura JOYINFOEX: typedef struct joyinfoex_tag { DWORD dwSize; DWORD dwFlags; DWORD dwXpos; DWORD dwYpos; DWORD dwZpos; DWORD dwRpos; DWORD dwUpos; DWORD dwVpos; DWORD dwButtons; DWORD dwButtonNumber; DWORD dwPOV; DWORD dwReserved1; DWORD dwReserved2;} JOYINFOEX; - o dwSize é para indicar-mos o tamanho da estrutura: dwSize = sizeof(JOYINFOEX); - o dwFlags é para indicar qual é o dado que queremos receber... eu prefiro usar a flag JOY_RETURNALL, porque assim posso receber os dados todos; - alguem me pode explicar os membros dwXpos, dwYpos, dwZpos, dwRpos, dwUpos, dwVpos? (apesar dos dwXpos, dwYpos serem para as direcçoes); - o dwButtons é para indicar o estados butoes em forma de bits; - o dwButtonNumber é para indicar quantos butoes estão pressionados no memento; - o que é o dwPOV?
  25. como fazer 1 super class: 1 - ao criar 1 objecto com a funçao CreateWindowEx(), mandamos o 'this' como o ultimo parametro: hwnd = CreateWindowEx(WS_EX_CLIENTEDGE|CS_HREDRAW | CS_VREDRAW , classname, strCaption.c_str(), WS_OVERLAPPEDWINDOW | BS_NOTIFY, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, parent, NULL, mod, this); 2 - no procedimento das mensagens criamos o pointeiro da class: form *inst = (form *)GetWindowLongPtr(HandleWindow, GWLP_USERDATA); 3 - na mesagem WM_NCCREATE, nós damos o valor ao ponteiro: switch(msg) { case WM_NCCREATE: { CREATESTRUCT *p = (CREATESTRUCT *)lParam; inst = (form *)p->lpCreateParams; SetWindowLongPtr(HandleWindow, GWLP_USERDATA, (LONG_PTR)inst); inst->hwnd = HandleWindow; } break; agora vou vos dar mais umas dicas: 1 - imagem que o BS_NOTIFY do butao(ou outro objecto) nao funciona(no procedimento de mensagens do butao): case WM_COMMAND: { switch(HIWORD(wParam)) { case BN_CLICKED: { inst->MouseClick(); } break; } break; } break; então no procedimento de mensagens do form, fazemos: case WM_COMMAND: { SendMessage((HWND)lParam , WM_COMMAND, wParam, lParam); } break; 1 - derem conta que vos falha alguma tecla das mensagens do teclado ou outra mensagem do procedimento, revejam o Ciclo de Mensagens: while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } este ciclo pode ser alterado e tambem pode fazer-mos perder algumas funcionalidades... eu uso o ciclo desta forma e nao tenho problemas. muito obrigado e fiquem

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!