-2

Cでいくつかのプログラムを作成する必要があり、ウィンドウを機能させることができません。それは主に言っている約30のエラーを思い付きます; そこにストレージクラスまたは型指定子がなく、宣言が期待される場合に期待されますが、これらが何を意味するのかわかりません。私は2つのタートリアルを見ましたが、どちらも非常によく似ていて、私のものは同じように見えます。したがって、これらの不足しているものが何であるかはわかりません。

これが私のコードです

#include <windows.h>

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hThisInst, 
                         HINSTANCE hPrevInst, 
                         LPSTR lpszArgs, 
                         int nWinMode);

{
WNDCLASS wcls;
HWND hwnd;
MSG msg;

LPCWSTR szClassName = L"ThreadsProgram";
LPCWSTR szWinName = L"My Threads Program"

    //Register Class
  wcls.style         =0; 
  wcls.lpfnWndProc   =WindowFunc;
  wcls.cbClsExtra    =0;
  wcls.cbWndExtra    =0;
  wcls.hInstance     =hThisInst;
  wcls.hIcon         =LoadIcon(NULL, IDI_APPLICATION);
  wcls.hCursor       =LoadCurser(NULL, IDC_ARROW);
  wcls.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
  wcls.lpszMenuName  =NULL;
  wcls.lpszClassName =szClassName;

      if(!RegisterClass(&wcls))
    {
        MessageBox(NULL, "Window Registration Failed!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

//Make Window 
hwnd = CreateWindow(szClassName,
szWinName,
WS_OVERLAPPINGWINDOW,
100,
100,
400,
400,
HWND_DESKTOP,
NULL,
hThisInst,
NULL);

//Show Window

if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Failed!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

ShowWindow(hwnd, nWinMode);
UpdateWindow(hwnd);

//Main Message Loop
while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (int)msg.wParam;
}
4

2 に答える 2

3

私が最初に目にする問題はここにあります:

int WINAPI WinMain(HINSTANCE hThisInst, 
                     HINSTANCE hPrevInst, 
                     LPSTR lpszArgs, 
                     int nWinMode);      /* <---- This semi-colon causes grief! */

{
WNDCLASS wcls;

の後にセミコロンがあるため、関数の宣言がありますint nWinMode);

それを除く。

他の問題もあるかもしれません。私はそれ以上調べなかったし、そうするつもりもなかった。独自のコードレビューが役に立たない場合は、コンパイラがガイドします。

于 2012-05-31T16:15:48.213 に答える
2

そこには多くのタイプミスがあります。

  1. WinMainの後のセミコロン

  2. MessageBox()関数は、4つのパラメーターではなく3つのパラメーターを取ります。

  3. LPWCSTRパラメータ

  4. nCmdShowを使用したShowWindow()は...表示しません

  5. WS_OVERPLAPPEDWINDOW(WS_OVERLAPPINGWINDOWではありません)

  6. LoadCurserのLoadCursorインストリード

今動作するはずです。次回は慎重に入力してください

#include <windows.h>

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
     switch(msg)
     {
         case WM_CLOSE: DestroyWindow(hwnd); break;
         case WM_DESTROY: PostQuitMessage(0); break;
         default: return DefWindowProc(hwnd, msg, wParam, lParam);
     }
     return 0;
}

int WINAPI WinMain(HINSTANCE hThisInst,  HINSTANCE hPrevInst,  LPSTR lpszArgs,  int nWinMode)
{
    WNDCLASS wcls;
    HWND hwnd;
    MSG msg;

    LPCSTR szClassName = "ThreadsProgram";
    LPCSTR szWinName = "My Threads Program";

    //Register Class
    wcls.style         =0; 
    wcls.lpfnWndProc   =WindowFunc;
    wcls.cbClsExtra    =0;
    wcls.cbWndExtra    =0;
    wcls.hInstance     =hThisInst;
    wcls.hIcon         =LoadIcon(NULL, IDI_APPLICATION);
    wcls.hCursor       =LoadCursor(NULL, IDC_ARROW);
    wcls.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
    wcls.lpszMenuName  =NULL;
    wcls.lpszClassName =szClassName;

     if(!RegisterClassA(&wcls))
    {
        MessageBoxA(NULL, 0, "Window Registration Failed!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    //Make Window 
    hwnd = CreateWindowA(szClassName, szWinName,
       WS_OVERLAPPEDWINDOW,
       100, 100, 400, 400,
       HWND_DESKTOP,
       NULL, hThisInst, NULL);

    //Show Window

    if(hwnd == NULL)
    {
        MessageBoxA(NULL, 0, "Window Failed!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, SW_SHOW/*nWinMode*/);
    UpdateWindow(hwnd);

    //Main Message Loop
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (int)msg.wParam;
}
于 2012-05-31T16:19:15.940 に答える