質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2912閲覧

何が原因?RegisterClassExが0を出す

Negligible-n

総合スコア18

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/06/11 14:12

こんばんは
今、WNDCLASSEXから作ったwcexをRegisterClassExしているのですが、何度やっても失敗します。以下の3つのファイルからなっています。

WinMain.cpp

C++

1#include<windows.h> 2#include"D3DAPP.h" 3 4class testApp :public d3DApp { 5public: 6 //Constructor 7 testApp(HINSTANCE hInstance); 8 //Destructor 9 ~testApp(); 10 11 //Methods 12 13 bool init() override; 14 void update(float dt) override; 15 void render() override; 16}; 17 18testApp::testApp(HINSTANCE hInstance) :d3DApp(hInstance) { 19 20} 21 22testApp::~testApp() { 23 24} 25 26bool testApp::init() { 27 if (!d3DApp::init()) { 28 return false; 29 } 30 31 return true; 32} 33 34void testApp::update(float dt) { 35 36} 37 38void testApp::render() { 39 40} 41 42int WINAPI WinMain( 43 HINSTANCE hInstance, 44 HINSTANCE hPrevInstance, 45 LPSTR lpCmdLine, 46 int nCmdShow) { 47 48 testApp* tApp = new testApp(hInstance); 49 50 if (!tApp->init()) { 51 return 1; 52 } 53 54 return tApp->run(); 55 56}

D3DApp.h

C++

1#include<windows.h> 2#include<d3d9.h> 3#include<d3dx9.h> 4 5class d3DApp { 6public: 7 //Constructor 8 d3DApp(HINSTANCE hInstance); 9 10 //destructor 11 virtual ~d3DApp(); 12 13 //Main application loop 14 int run(); 15 16 //Framework methods 17 virtual bool init(); 18 virtual void update(float dt) = 0; 19 virtual void render() = 0; 20 LRESULT msgProc(HWND hwnd, UINT msg, WPARAM aParam, LPARAM lParam); 21 22protected: 23 //Attributes 24 HWND m_hAppWindow; 25 HINSTANCE m_hAppInstance; 26 unsigned int m_uiClientWidth; 27 unsigned int m_uiClientHeight; 28 LPCWSTR m_sAppTitle; 29 DWORD m_WindowStyle; 30 31 //methods 32 33 //Initialize the app window 34 bool initWindow(); 35 36 //Initialize Direct3D 37 bool initDirect3D(); 38}; 39

D3DApp.cpp

C++

1#include"D3DApp.h" 2 3namespace { 4 //Create a global pointer to d3DApp 5 d3DApp* g_pd3DApp; 6} 7 8LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { 9 //Foward the messages 10 return g_pd3DApp->msgProc(hwnd, msg, wParam, lParam); 11} 12 13d3DApp::d3DApp(HINSTANCE hInstance) { 14 m_hAppWindow = NULL; 15 m_hAppInstance = hInstance; 16 m_uiClientWidth = 800; 17 m_uiClientHeight = 600; 18 m_sAppTitle = (LPCWSTR)TEXT("DIRECTX9 App"); 19 m_WindowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; 20} 21 22d3DApp::~d3DApp() { 23 //Release object from memory 24} 25 26int d3DApp::run() { 27 //Main message loop 28 MSG msg = { 0 }; 29 while (WM_QUIT != msg.message) { 30 if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)) { 31 TranslateMessage(&msg); 32 DispatchMessage(&msg); 33 } else { 34 //Update 35 update(0.0f); 36 //Render 37 render(); 38 } 39 } 40 41 return static_cast<int>(msg.wParam); 42 43} 44 45bool d3DApp::init() { 46 //Check window creation 47 if (!initWindow()) { 48 return false; 49 } 50 51 //Check Direct3D initilization 52 if (!initDirect3D()) { 53 return false; 54 } 55 56 return true; 57} 58 59bool d3DApp::initWindow() { 60 //Create WNDCLASS 61 WNDCLASSEX wcex; 62 static LPCWSTR classNameLPCWSTR = (LPCWSTR)TEXT("D3DAPPWNDCLASS"); 63 ZeroMemory(&wcex, sizeof(WNDCLASSEX)); 64 wcex.cbClsExtra = 0; 65 wcex.cbWndExtra = 0; 66 wcex.cbSize = sizeof(WNDCLASS); 67 wcex.style = CS_HREDRAW | CS_VREDRAW; 68 wcex.hInstance = m_hAppInstance; 69 wcex.lpfnWndProc = MainWndProc; 70 wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); 71 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 72 wcex.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH); 73 wcex.lpszMenuName = NULL; 74 wcex.lpszClassName = classNameLPCWSTR; 75 wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 76 77 //Register that class 78 if (!RegisterClassEx(&wcex)) { 79 MessageBox(NULL, (LPCWSTR)TEXT("Failed to register window class"), NULL, NULL); 80 return false; 81 } 82 83 //Cache requested width, height 84 RECT r = { 0,0,m_uiClientWidth,m_uiClientHeight }; 85 AdjustWindowRect(&r, m_WindowStyle, false); 86 int width = r.right - r.left; 87 int height = r.top - r.bottom; 88 89 //Create the window 90 m_hAppWindow = CreateWindow( 91 (LPCWSTR)TEXT("D3DAPPWNDCLASS"), 92 m_sAppTitle, 93 m_WindowStyle, 94 GetSystemMetrics(SM_CXSCREEN) / 2 - width / 2, 95 GetSystemMetrics(SM_CYSCREEN) / 2 - height / 2, 96 width, 97 height, 98 NULL, 99 NULL, 100 m_hAppInstance, 101 NULL); 102 103 //Check if window was created 104 if (!m_hAppWindow) { 105 MessageBox(NULL, (LPCWSTR)TEXT("Failed to create window"), NULL, NULL); 106 return false; 107 } 108 109 //Show the window 110 ShowWindow(m_hAppWindow, SW_SHOW); 111 112 return true; 113} 114 115bool d3DApp::initDirect3D() { 116 return true; 117} 118 119LRESULT d3DApp::msgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { 120 switch (msg) { 121 case WM_DESTROY: 122 PostQuitMessage(0); 123 return 0; 124 } 125 126 return DefWindowProc(hwnd, msg, wParam, lParam); 127}

海外の古いYouTubeから引っ張ってきたので、(URL:https://youtu.be/Il6jySpR3VI)今VS2019でやっているので。。。

現状はちょうどRegisterClassExの部分で、0が出てきてしまっています。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

RegisterClassExを使う場合はWNDCLASSEXが必要だけど、cbSizeがsizeof(WNDCLASS)になっているからEXとして認識されないので失敗、ということじゃないかな?

投稿2019/06/11 14:43

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

ベストアンサー

C++

1wcex.cbSize = sizeof(WNDCLASS);

これが、こうですね。

C++

1wcex.cbSize = sizeof(WNDCLASSEX);

投稿2019/06/11 14:43

atata0319

総合スコア881

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問