-1

CreateWindowEx(..) を呼び出す前に、エラーはありません。また、CreateWindowEx は NULL を返しません。そして興味深いことに、ShowWindow を呼び出した後にウィンドウが表示されます。

ご覧のとおり、コードにはエラー コードを書き込む 2 つのメッセージ ボックスがあります。最初の 1 つは 126 を書き込み、もう 1 つは 0 を書き込みます。

(エラー 126 意味: ERROR_MOD_NOT_FOUND 126 (0x7E) 指定されたモジュールが見つかりませんでした。)

ウィンドウが作成された後、画像でわかるようにウィンドウが正しく機能しません。ウィンドウが作成された領域のポインターが読み込み位置などにあり、マウスカーソルをウィンドウに移動すると、ウィンドウが機能しません。矢印は表示されますが、サイズ変更カーソルは表示されません。

私の英語で申し訳ありませんが、助けてくれてありがとう。

コード: WinDeneme.cpp

    // WinDeneme.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

const wchar_t *AppName = L"Example";
unsigned int ClassID=0;
wchar_t Error[100];

LRESULT CALLBACK Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    wchar_t *ClassName = (wchar_t*)malloc(sizeof(wchar_t) * 100);

    swprintf(ClassName,100,L"%s_%d",AppName,ClassID);
    ClassID++;

    WNDCLASS *Class = (WNDCLASS*)calloc(1,sizeof(WNDCLASS));

    Class->lpszClassName = ClassName;
    Class->hInstance = hInstance;
    Class->lpfnWndProc = (WNDPROC)Proc;

    RegisterClass(Class);

    HWND Win = CreateWindowEx(
        0,                              // Optional window styles.
        ClassName,                     // Window class
        AppName,    // Window text
        WS_OVERLAPPEDWINDOW,            // Window style

        // Size and position
        CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,

        NULL,       // Parent window    
        NULL,       // Menu
        hInstance,  // Instance handle
        NULL        // Additional application data
        );

    swprintf(Error,100,L"%d",GetLastError());
    MessageBox(0,Error,L"Error",MB_OK); //  126

    ShowWindow(Win,nCmdShow);

    swprintf(Error,100,L"%d",GetLastError());
    MessageBox(0,Error,L"Error",MB_OK); //  0

    MSG msg = { };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }


    return EXIT_SUCCESS;
}

LRESULT CALLBACK Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);

            FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));

            EndPaint(hwnd, &ps);
        }
        return 0;

    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

stdafx.h

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <tchar.h>

画像(カーソルが印刷画面に表示されないため、カメラを使用しました):

ポインタはロード位置にあります

ポインターはサイズ変更位置にあります

**編集:追加することでポインターの問題を解決しました

Class->hCursor = LoadCursor(NULL, IDC_ARROW);

しかし、VS2012 Express ではまだエラー 126 が発生します。

4

2 に答える 2

0

CreateWindowNULL 以外の値を返す場合、失敗していません。エラーがないので、呼び出す必要はありませんGetLastError

于 2013-07-17T11:07:24.063 に答える