이것은 꽤 오랫동안 작업 해 온 GameBoy 에뮬레이터입니다. 원래는 MacOS에서만 작동했지만 최근에는 Windows 포트에서 작업했습니다. 창 생성 및 렌더링에 SDL을 사용하고 있습니다. 내가 뭘하고 싶은 건 Win32 API (CreateMenu, AppendMenu, 등)를 사용하여 일반적인 Windows 메뉴 막대를 만드는 것입니다. 지금까지 메뉴 막대를 창에 존재시킬 수 있지만 CALLBACK WndProc()을 사용하여 콜백을 추가하려고합니다. 따라서 메뉴에서 옵션을 클릭한다는 것을 알 수 있습니다. 이것은 성공적이지 못했습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? Win32 메뉴로 SDL을 사용하는 방법
이
은의 WinMain 진입 점입니다 :/***************** INSTANCES *******************/
static Core::GameBoy* mGameBoy_Instance;
static FrontEnd::SDLContext* mSDL_Instance;
/***********************************************/
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
{
// Load options
Core::Settings settings;
Util::CreateSettingsFromFile(OPTIONS_FILE_PATH, settings);
settings.skip_bootrom = true;
// Create the system instance
mGameBoy_Instance = new Core::GameBoy(settings, WIN_WIDTH, WIN_HEIGHT);
// Initalize Render Context
const char* windowTitle = mGameBoy_Instance->GetCurrentROM()->GetRomName();
mSDL_Instance = new FrontEnd::SDLContext(WIN_WIDTH, WIN_HEIGHT, WIN_SCALE, windowTitle);
// Initialize menubar
SDL_SysWMinfo sysInfo;
SDL_VERSION(&sysInfo.version);
SDL_GetWindowWMInfo(mSDL_Instance->GetWindow(), &sysInfo);
HWND hwnd = sysInfo.info.win.window;
/*********************************/
HMENU menubar = CreateMenu();
/*********************************/
HMENU file = CreateMenu();
HMENU exit = CreateMenu();
/*********************************/
AppendMenu(menubar, MF_POPUP, (UINT_PTR)file, "File");
AppendMenu(file, MF_STRING, (UINT_PTR)exit, "Exit");
SetMenu(hwnd, menubar);
// start sdl thread and main loop
}
을 그리고 이것은 콜백 함수 코드입니다 :이 작업을 수행 할 때 콜백이
LRESULT CALLBACK WndProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
switch (uMsg) {
case WM_COMMAND:
{
switch (LOWORD(wParam)) {
case 2: // Should be the Exit button in the order of the menu
SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
}
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
return NULL;
}
를 호출되지 않습니다. 도움을 주시면 감사하겠습니다. 감사합니다.
는이 [mcve] ... –