Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera! :D
Hoje vou pedir uma ajuda aqui!
To fazendo umas paradas de classes aqui no Code::Blocks, é basicamente um "remake" de umas classes de janelas Win32 que eu tinha feito tempos atrás, só que agora com uma diferença: a tranqueira não funciona :P
Não sei o que to fazendo errado aqui, mas o CreateWindowEx retorna NULL, e ao adicionar uma função de verificar erros que eu achei na MSDN (copiei e colei também pra debugar essa bagaça), chamando essa função logo no início do programa, antes da instância da classe da janela, ou seja, a primeira instrução da função WinMain, ele me retorna o erro 2: O sistema não pôde encontrar o arquivo especificado.
Já to quebrando a cabeça com isso aqui, não sei o que eu faço pra essa coisa funcionar. Já esgotei todas as minhas ideias. Vou copiar e colar como está o arquivo principal:
#include "SimpWin/SimpWin.h"
#include <stdio.h>
// Make the class name into a global variable
char szClassName[] = "WindowsApp";
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
sprintf((char*)lpDisplayBuf,
TEXT("%s failed with error %d: %s"),
lpszFunction, (int)dw, (char*)lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
ErrorExit(TEXT("LOL"));
Window* win = Window::CreateWindowClass(hThisInstance, szClassName, WindowProcedure);
if(!win->Register())
{
return 0;
}
win->Show(nFunsterStil);
int res = win->HandleMessages();
delete win;
return res;
}
/* This function is called by the Windows function DispatchMessage() */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc (hwnd, message, wParam, lParam);
}Agradeço quem puder me ajudar \o
Se precisarem ver os códigos de algum dos métodos aí avisa... se eu for copiar tudo aqui vai ficar gigante demais
Opa galera! Consegui resolver a tranqueira aqui! hehe
Vou dividir essa parada aqui em dois posts, fica mais fácil pra quem estiver vendo, o post 1 tem o problema e o post 2 tem a solução...
O erro tava em outra classe String que eu tinha aqui, a função copy dela utilizada no operator= e outras coisas copiava a array de caracteres, mas não atualizava o campo length da classe (essa classe descendia da classe Array<char>), e na hora de converter para char, retornava um char com 0 elementos... e era justamente isso que acontecia no CreateWindowEx.
Arrumei e recompilei a outra biblioteca aqui, e recompilei esse código da janela, e agora funciona joinha (tirando uma cagada que eu fiz aqui, eu preciso me ligar que o hwnd retornado pelo CreateWindowEx e o que o WNDPROC recebe são diferentes... aparentemente).
Valeu pessoal :P