Ir ao conteúdo
  • Cadastre-se

Cambalinho

Membro Pleno
  • Posts

    942
  • Cadastrado em

  • Última visita

Tudo que Cambalinho postou

  1. eu ainda estou com problemas com os graficos da win32 void bitmap(image imgImage)//image é a minha class de imagens que me fornece o HBITMAP { BITMAP bm; HDC MemDCExercising = CreateCompatibleDC(NULL); GetObject((HBITMAP) imgImage,sizeof(bm),&bm); HBITMAP outbitmap=CreateBitmap(bm.bmWidth,bm.bmHeight,1,32,NULL); HBITMAP oldbitmap =(HBITMAP) SelectObject(MemDCExercising, outbitmap); DrawHBITMAPtoHDC((HBITMAP)imgImage,MemDCExercising);//copia o HBITAMP para 1 HDC em modo transparente olhando para este codigo(eu apago os objectos\resources) porque eu recebo 1 rectangulo preto em vez de 1 imagem transparente? o problema nao é imgImage e nem a funçao DrawHBITMAPtoHDC() (eu os uso á parte sem problemas). então só me resta 1 erro que nao entendo: - a criaçao do MemDCExercising ; - ou do outbitmap; alguem me pode explicar?
  2. preciso de ajuda em varios aspectos que me deixam mais confuso do que o inglês no MSDN disseram-me que a mensagem WM_MENUSELECT, verifica o movimento do rato entre os items do menu(bom para verificar as entradas e saídas entre items): http://msdn.microsoft.com/en-us/library/windows/desktop/ms646352%28v=vs.85%29.aspx - o LOWORD(wparam) da-me o index\posiçao do item do menu; - o HIWORD(wparam) da-me as propriedades do item do menu; - lparam da-me o handle do menu. onde foi clicado. juntando esta informaçao e WM_INITMENUPOPUP: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646347%28v=vs.85%29.aspx - wparam da-me o handle do menu item ou do menu popup; - LOWORD(lparam) da-me a posiçao do item; - HIWORD(lparam) indica-me se o menu é ou nao 1 popup(nao sei bem traduzir o popup, aceito correçao); fiz este codigo: case WM_MENUSELECT: { HMENU menuhandle2=(HMENU)lParam; int menu=LOWORD(wParam); if(HIWORD(wParam) & MF_HILITE & !MF_POPUP) { if(menuitem!=-1) { MENUITEMINFO menuInfo; menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask=MIIM_DATA; GetMenuItemInfo((HMENU)lParam,menuitem, true, &menuInfo ); Menu *mMenu = (Menu *) menuInfo.dwItemData; if (mMenu!=NULL) { mMenu->Leave(); } } //SetWindowText(HandleWindow,to_string(GetLastError()).c_str()); MENUITEMINFO menuInfo; menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask=MIIM_DATA; GetMenuItemInfo((HMENU)lParam,menuitem, true, &menuInfo ); Menu *mMenu = (Menu *) menuInfo.dwItemData; if (mMenu!=NULL) { mMenu->Enter(); } } return 0; } break; case WM_INITMENUPOPUP: { menuhandle=(HMENU)wParam; return 0; } break; eu devo ter interpretado alguma coisa mal porque ainda me dá erros alguem me pode explicar onde me enganei e como interpretei mal o MSDN?
  3. eu resolvi esse erro: Menu(string caption, Menu *submenu=NULL, HWND MainHWND=WindowMain, bool systmenu=false) //WindowMain is then 1st form handle(WHND window) that is created { //calculate the ID intID=intID+1; ID=intID; Mainwindow=MainHWND; //calculate the caption //i'm changing these too strCaption=caption; if (strCaption=="") strCaption=(string)caption + " " + to_string(ID); //getting the menu bar handle if the submenu is null mnuBar = GetMenu(Mainwindow); if(mnuBar==NULL) mnuBar = CreateMenu(); if(systmenu==true) mnuBar=GetSystemMenu(Mainwindow,false); //creates the popup menu for add the new items if (submenu==NULL && systmenu==true ) { AppendMenu(mnuBar, MF_STRING, ID, strCaption.c_str()); MenuHandle=mnuBar;//is where the submenu is created SetMenu(MainHWND, mnuBar); menuposition=GetMenuItemCount(mnuBar)-1; ispopup=false; MenuPopup=mnuBar; primeiromenu=false; } else if (submenu==NULL) { HMENU hSubMenu=CreatePopupMenu() ; AppendMenu(mnuBar, MF_STRING | MF_POPUP, (UINT)hSubMenu, strCaption.c_str()); MenuHandle=hSubMenu;//is where the submenu is created SetMenu(MainHWND, mnuBar); menuposition=GetMenuItemCount(mnuBar)-1; ispopup=true; MenuPopup=GetMenu(MainHWND); primeiromenu=true; } else { //creates a separator if(strCaption=="-") { AppendMenu((HMENU)submenu, MF_SEPARATOR, ID, strCaption.c_str()); MenuHandle=(HMENU)submenu; SetMenu(MainHWND, GetMenu(MainHWND));//update the menu ispopup=false; } //change the subitem to be a popup menu else if(submenu->ispopup==false) { HMENU hSubMenu=CreatePopupMenu(); ModifyMenu(submenu->MenuHandle,submenu->menuposition,MF_BYPOSITION| MF_POPUP|MF_STRING,(UINT_PTR)hSubMenu, submenu->strCaption.c_str()); submenu->MenuHandle=hSubMenu;//is where the submenu is created AppendMenu(submenu->MenuHandle, MF_STRING, ID, strCaption.c_str()); SetMenu(MainHWND, GetMenu(MainHWND)); menuposition=GetMenuItemCount(submenu->MenuHandle)-1; MenuHandle=hSubMenu; SetMenu(MainHWND, GetMenu(MainHWND)); MenuPopup=submenu->MenuPopup; submenu->ispopup=true; } //add a new item on subtmenu popup menu else if(submenu!=NULL) { AppendMenu((HMENU)submenu->MenuHandle, MF_STRING, ID, strCaption.c_str()); MenuHandle=(HMENU)submenu->MenuHandle;//the menu handle is the popup menu handle... instead the item menu handle menuposition=GetMenuItemCount((HMENU)submenu->MenuHandle)-1;//calculate the menu position SetMenu(MainHWND, GetMenu(MainHWND));//update the menu ispopup=false; } } MENUINFO mnInfo; mnInfo.cbSize=sizeof(MENUINFO); mnInfo.fMask=MIM_STYLE; if(systmenu==false) GetMenuInfo(GetMenu(MainHWND),&mnInfo); else GetMenuInfo(GetSystemMenu(MainHWND,false),&mnInfo); mnInfo.cbSize=sizeof(MENUINFO); mnInfo.fMask=MIM_STYLE; mnInfo.dwStyle=MNS_NOTIFYBYPOS; if(systmenu==false) SetMenuInfo(GetMenu(MainHWND),&mnInfo); //put the this on dwItemData HMENU hMenu = NULL; if(primeiromenu) hMenu = GetMenu(MainHWND); else if(ispopup) hMenu = (HMENU)submenu->MenuHandle; else if(systmenu==true) hMenu=GetSystemMenu(MainHWND,false); else hMenu = MenuHandle; MENUITEMINFO s; s.cbSize=sizeof(MENUITEMINFO ); s.fMask=MIIM_DATA; GetMenuItemInfo (hMenu,menuposition, true, &s); s.cbSize=sizeof(MENUITEMINFO ); s.fMask=MIIM_DATA; s.dwItemData=(ULONG_PTR)this; SetMenuItemInfo (hMenu,menuposition, true, &s); }//no window procedure do form:case WM_MENUCOMMAND: { MENUITEMINFO menuInfo; menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask=MIIM_DATA; GetMenuItemInfo((HMENU)lParam,(UINT) wParam, true, &menuInfo );//true means by position Menu *mMenu = (Menu *) menuInfo.dwItemData; mMenu->MenuClick(); } break; agora estou a fazer para o menu do system(o icon da janela): case WM_INITMENUPOPUP: { menuhandle=(HMENU)wParam; return 0; } break; case WM_SYSCOMMAND: { if (menuhandle!=NULL) { int menuitemcount=GetMenuItemCount(menuhandle)-1; int i=0; for(i=0; i<menuitemcount; i++) { if(GetMenuState(menuhandle,i,MF_BYPOSITION) == MF_HILITE) { menuposition=(UINT)i; break; } } SetWindowText(HandleWindow, to_string(i).c_str()); MENUITEMINFO menuInfo; menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask=MIIM_DATA; GetMenuItemInfo(menuhandle,(UINT) menuposition, true, &menuInfo );//true means by position Menu *mMenu = (Menu *) menuInfo.dwItemData; if (mMenu!=NULL) { mMenu->MenuClick(); menuhandle=NULL; menuposition=0; } } return DefWindowProc(HandleWindow, msg, wParam, lParam); } break; algo se passa com o ciclo for, eu recebo sempre o mesmo resultado. o GetMenuState() nao é para me indicar se o rato esta por cima do item do menu?
  4. muito obrigado pela dica. mas sabes que 1 string, neste caso, pode ter 1 resultado inesperado, mas o parametro obriga a meter 1 valor na string, mesmo que tenha de ser '""' muito obrigado
  5. o erro é com a string. o meu problema, é para receber, no segundo parametro, 1 HMENU ou Menu*... depende do que quiser aplicar eu utilizo o Code Blocks com o MinGW,, talvez nao tenha o MinGW actualizado... baixei os 2(IDE e compilador) á parte. ja vi que o IDE incluido o MinGW, nao deve ter algumas funçoes que uso
  6. como posso fazer 2 construtores numa class? Menu(string caption="&Menu",HMENU systemmenu=NULL, HWND MainHWND=WindowMain) { } Menu(string caption="&Menu", Menu *submenu=NULL, HWND MainHWND=WindowMain, bool systmenu=false) //WindowMain is then 1st form handle(WHND window) that is created { } eu recebo 1 erro 'ambiguos'. porque nao posso ter 2 construtores? (porque 2 construtores? 1 para o menu bar e outro para o menu do system)
  7. sim mas ja resolvi... demorei mesmo muito mas consegui hehehehehe eis os passos que pode ajudar outros leitores: 1 - instale o code blocks(esta versão não trás compilador); 2 - copia a pasta do mingw32 para onde desejar(como nao vai instalar o mingw32, nao se esqueça onde vai deixar a pasta); 3 - abra o code blocks, mas sem abrir 1 projecto; 4 - Settings - Compiler. e na aba ToolChain Executables - Compiler Instalation Directory: meta a pasta do mingw32("C:\Program Files (x86)\CodeBlocks\mingw32". clique no butao Auto-Detect para detectar o compilador(recebe 1 mensagem de verificaçao); 5 - verifique o Link for dynamic libs, porque pode ter o nome do ficheiro incorrecto. deve ser: i686-w64-mingw32-g++.exe; 6 - na aba Search Directories - compiler meta o endereço das include: "C:\Program Files (x86)\CodeBlocks\mingw32\i686-w64-mingw32\include" 7 - na aba Search Directories - linker meta as librarias: "C:\Program Files (x86)\CodeBlocks\mingw32\i686-w64-mingw32\lib" 8 - clique em OK; 9 - abra 1 projecto ou crie; 10- no menu Project - Options, na aba search directories deve estar como disse á pouco, caso contrario, faça-o novamente; 11 - na aba linker settings, adicionamos as librarias e DLL's que vamos usar no projecto. 1 projecto 'hello world' nao precisa. depende das funçoes ou dos ficheiros headers que usamos nos projectos. muito obrigado
  8. ja formatei o pc... mas esqueci-me como se configura o Code Blocks consigo detectar o GNU compiler, mas nao os ficheiros include quando tento compilar eu recebo este erro: "c:\test\test\Untitled1.c|1|fatal error: iostream: No such file or directory|" o que fiz mal?
  9. desculpem de só responder agora, mas tenho andado muito ocupado e apressado só descubri ontem, esqueçam o gerenciador free download manager... alguns antivirus podem no assumir como virus ou isso. ou então tentem baixar no site deles(se é que têm... desculpem, mas nao sei). eu aconselho estes passos simples que fiz(dado de nao ter a certeza absoluta o que resolveu 1 grande parte do problema ) - façam a limpeza e correçao de erros com o Advanced system care(nao é gratuito... talvez tenham 1 versao gratuita)... este programa ja me resolveu inumeros problemas; - o ccleaner é livre e bom para limpar ficheiros temporarios de net e nao só(sem provas, mas nao passem 2 vezes seguidas); - podia indicar mais algumas experiencias minhas.. mas nao é isso que pretendo... mas ja ajudo muito outros leitores - penso que foi mesmo o SG TCP Optimizer : http://www.speedguide.net/downloads.php que resolveu o problema. agora sinto os downloads mais rapidos(com o erro erram 7KB's ou menos e agora 13KB's ou mais.. tenho internet lenta porque ultrapassei os 15GB's. e a banda larga me reduz a velocidade automaticamente e estou no limite da cobertura. muito obrigado a todos
  10. chegando a casa todos os dias ás 9h pm e sair ás 7h am.. é complicado... só no fim de semana mas estou a testar a tua dica
  11. desculpa, mas ja que comecei aqui aceito dicas. ja passei o spyhunter em modo de registo/hooks... mas nao completo. possso tentar isso
  12. nem eu entendo amigo ate o microsoft security essecials(o antivirus livre da microsoft) nem consegue fazer a actualizaçao estou desanimado e sem tempo para formatar.. só no fim de semana
  13. ate aumentou bem a velocidade de download hehehehe alem disso o download nao aceita retoma... o que isso significa?
  14. nao é só(lembrei-me de 1 outro site)... mas sim alguns downloads estou a testar o download manager para ver se ajuda http://www.toshiba.pt/innovation/download_drivers_bios.jsp?service=PT&selCategory=2&selFamily=2&selSeries=312&selProduct=6017&selShortMod=2958&language=33&selOS=29&selType=all&yearupload=&monthupload=&dayupload=&useDate=null&mode=allMachines&search=&action=search&macId=&country=28&page=2&nextCl=true tenta sacar a webcam testado: o download manager resolveu o problema. será possivel que eu tenha algumas configuraçoes erradas no pc ou isso?
  15. tudo amigo desculpa, mas nao sei ate que ponto posso te passar o link(falo das regras do forum)
  16. ja testei em dois browsers(chrome e firefox) o mesmo download. ambos me indicam que foi feito o download, mas quando abro zip, porque o erro? (os downloads sao do site da toshiba(neste caso que noto o erro))
  17. YES!!!! agora funciona bem amigo: const int AnyKey=257;const int NoKey=256;const int ON=2;void GetKeyBoardKeyState(int *keys){ Keys[AnyKey]=0; Keys[NoKey]=1; for(int i=0; i<258; i++) { //if a key isn't a lock activated(2) //put it zero keys[i]=0; //if a key is pressed if(GetKeyState(i) & 0x8000) { //if a key isn't a lock activated(2) //put it 1 keys[i]=1; //any key pressed Keys[AnyKey]=1; Keys[NoKey]=0; } } //testing the lock activation if(((GetKeyState(VK_CAPITAL) & 0x0001)!=0)) keys[VK_CAPITAL]=2; if(((GetKeyState(VK_NUMLOCK) & 0x0001)!=0)) keys[VK_NUMLOCK]=2; if(((GetKeyState(VK_SCROLL) & 0x0001)!=0)) keys[VK_SCROLL]=2;} penso estar-me a enganar numa cena e na condiçao do 'for': const int AnyKey=257;const int NoKey=256;for(int i=0; i<258; i++) como ves o AnyKey é 257 e depois no 'for'. mas penso estar correcto, certo?
  18. desculpa, mas nao resolveu o problema outra coisa que testei e ainda nao te disse. vê estes 2 casos: 1 - clicas na num lock(ou outra tecla) varias vezes. notas que é activada ou desactivada(esta correcto); 2 - imagina que deixas a num lock activada e clicas noutra tecla qualquer, eu perco os valor de activado. porque que isto acontece? a mim o codigo parace-me correcto. talvez use mal a GetKeyState(), mas o codigo esta bem pensado.
  19. tambem o fiz e tirei os 'if's' do ciclo 'for'... mas mesmo assim estou com problemas e o problema esta mesmo aqui: if(((GetKeyState(VK_CAPITAL) & 0x0001)!=0)) { keys[VK_CAPITAL]=2; } if(((GetKeyState(VK_NUMLOCK) & 0x0001)!=0)) { keys[VK_NUMLOCK]=2; } if(((GetKeyState(VK_SCROLL) & 0x0001)!=0)) { keys[VK_SCROLL]=2; } este codigo, é especifico para verificar se o num/scroll/caps estão activos ou n. aqui é que esta o erro, porque deve só verificar 1 deles
  20. eu fiz 1 funçao para verificar o estado das teclas(se estão pressionadas ou activas(como o scroll/num/caps lock)): const int AnyKey=257;const int NoKey=256;const int ON=2;void GetKeyBoardKeyState(int *keys){ bool NoKey=true; bool AnyKey =false; for(int i=0; i<256; i++) { if(GetKeyState(i) & 0x8000) { keys[i]=1; if((i==VK_CAPITAL) && ((GetKeyState(VK_CAPITAL) & 0x0001)!=0)) keys[i]=2; if((i==VK_NUMLOCK) && ((GetKeyState(VK_NUMLOCK) & 0x0001)!=0)) keys[i]=2; if((i==VK_SCROLL) && ((GetKeyState(VK_SCROLL) & 0x0001)!=0)) keys[i]=2; NoKey=false; AnyKey=true; } else { keys[i]=0; } } if(NoKey==false) { keys[256]=0; } else { keys[256]=1; } if(AnyKey==true) { keys[257]=1; } else { keys[257]=0; }} esta funçao é chamada de 120 em 120 millisegundos num temporizador. mas tenho 1 problema: as teclas num/scroll/caps lock parecem só ser testadas 1 delas em vez das 3 alguem me pode explicar onde esta a minha confusao?
  21. lamento mas nao tenho outra idea para isso, ao criar os menus, ja os preparo para serem trabalhados na mensagem WM_MENUCOMMAND: //put the this on dwItemData MENUITEMINFO s; GetMenuItemInfo (hMenu,intID, true, &s); s.cbSize=sizeof(MENUITEMINFO ); s.fMask=MIIM_DATA; s.dwItemData=(ULONG_PTR)this; SetMenuItemInfo (hMenu,intID, true, &s); //change the menu for use the WM_MENUCOMMAND MENUINFO mnInfo; GetMenuInfo(hMenu,&mnInfo); mnInfo.cbSize=sizeof(MENUINFO); mnInfo.fMask=MIM_STYLE; mnInfo.dwStyle=MNS_NOTIFYBYPOS; SetMenuInfo(hMenu,&mnInfo); mas nao estou a captar o 'this' correctamente.. alguem me pode dizer o que fiz de errado? case WM_MENUCOMMAND: { BOOL fResult = FALSE; MENUITEMINFO menuInfo = { 0 }; menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask = MIIM_ID | MIIM_DATA; fResult = GetMenuItemInfo((HMENU)lParam,(UINT) wParam, TRUE, &menuInfo ); if (fResult!=0) { UINT myId = menuInfo.wID; // this is item ID ULONG_PTR myData = menuInfo.dwItemData; // item data (like 'this' pointer') CREATESTRUCT *p = (CREATESTRUCT *)menuInfo.dwItemData; Menu *menu = (Menu *)p->lpCreateParams; //if(mMenu->MenuClick==NULL) break; //mMenu->MenuClick();//it's a lambda function variable } } break;

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!