2010-10-23 5 views
2

Je suis en train de créer une interface graphique uniquement utiliser native windows api. i créer des projets dans vs 2008 en utilisant projet de console win32 et projet de fenêtre win32, et je l'ai utilisé l'exemple de code de Microsoft comme ci-dessouscréer un GUI en utilisant la fenêtre API native

#include <windows.h> 

// Global variable 

HINSTANCE hinst; 

// Function prototypes. 

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 
InitApplication(HINSTANCE); 
InitInstance(HINSTANCE, int); 
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); 

// Application entry point. 

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
{ 
    MSG msg; 

    if (!InitApplication(hinstance)) 
     return FALSE; 

    if (!InitInstance(hinstance, nCmdShow)) 
     return FALSE; 

    BOOL fGotMessage; 
    while ((fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0 && fGotMessage != -1) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    return msg.wParam; 
     UNREFERENCED_PARAMETER(lpCmdLine); 
} 

BOOL InitApplication(HINSTANCE hinstance) 
{ 
    WNDCLASSEX wcx; 

    // Fill in the window class structure with parameters 
    // that describe the main window. 

    wcx.cbSize = sizeof(wcx);   // size of structure 
    wcx.style = CS_HREDRAW | 
     CS_VREDRAW;     // redraw if size changes 
    wcx.lpfnWndProc = MainWndProc;  // points to window procedure 
    wcx.cbClsExtra = 0;    // no extra class memory 
    wcx.cbWndExtra = 0;    // no extra window memory 
    wcx.hInstance = hinstance;   // handle to instance 
    wcx.hIcon = LoadIcon(NULL, 
     IDI_APPLICATION);    // predefined app. icon 
    wcx.hCursor = LoadCursor(NULL, 
     IDC_ARROW);     // predefined arrow 
    wcx.hbrBackground = GetStockObject( 
     WHITE_BRUSH);     // white background brush 
    wcx.lpszMenuName = "MainMenu"; // name of menu resource 
    wcx.lpszClassName = "MainWClass"; // name of window class 
    wcx.hIconSm = LoadImage(hinstance, // small class icon 
     MAKEINTRESOURCE(5), 
     IMAGE_ICON, 
     GetSystemMetrics(SM_CXSMICON), 
     GetSystemMetrics(SM_CYSMICON), 
     LR_DEFAULTCOLOR); 

    // Register the window class. 

    return RegisterClassEx(&wcx); 
} 

BOOL InitInstance(HINSTANCE hinstance, int nCmdShow) 
{ 
    HWND hwnd; 

    // Save the application-instance handle. 

    hinst = hinstance; 

    // Create the main window. 

    hwnd = CreateWindow( 
     "MainWClass",  // name of window class 
     "Sample",   // title-bar string 
     WS_OVERLAPPEDWINDOW, // top-level window 
     CW_USEDEFAULT,  // default horizontal position 
     CW_USEDEFAULT,  // default vertical position 
     CW_USEDEFAULT,  // default width 
     CW_USEDEFAULT,  // default height 
     (HWND) NULL,   // no owner window 
     (HMENU) NULL,  // use class menu 
     hinstance,   // handle to application instance 
     (LPVOID) NULL);  // no window-creation data 

    if (!hwnd) 
     return FALSE; 

    // Show the window and send a WM_PAINT message to the window 
    // procedure. 

    ShowWindow(hwnd, nCmdShow); 
    UpdateWindow(hwnd); 
    return TRUE; 

} 

alors je suis les erreurs:

1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(11) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(56) : error C2440: '=' : cannot convert from 'HGDIOBJ' to 'HBRUSH' 
1>  Conversion from 'void*' to pointer to non-'void' requires an explicit cast 
1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(57) : error C2440: '=' : cannot convert from 'const char [9]' to 'LPCWSTR' 
1>  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(58) : error C2440: '=' : cannot convert from 'const char [11]' to 'LPCWSTR' 
1>  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(64) : error C2440: '=' : cannot convert from 'HANDLE' to 'HICON' 
1>  Conversion from 'void*' to pointer to non-'void' requires an explicit cast 
1>c:\users\helloworld\documents\visual studio 2008\projects\motionwindow2\motionwindow2\main.cpp(92) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [11]' to 'LPCWSTR' 
1>  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
1>Build log was saved at "file://c:\Users\HelloWorld\Documents\Visual Studio 2008\Projects\motionwindow2\motionwindow2\Debug\BuildLog.htm" 
1>motionwindow2 - 7 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Quelqu'un sait ce que j'ai mal fait? Je n'ai pas du tout modifié le code, et c'est un projet vide.

Merci

+0

Documentation rapport de bogue déposé. –

Répondre

4

Vous avez plusieurs problèmes:.

+0

+1. Bons liens. Je vais supprimer ma réponse ... –

+0

@Merlyn: Vous avez eu la réponse correcte à chacun des trois problèmes, même si ce n'est pas l'explication historique. Eh bien, je peux voter sur certaines de vos autres réponses bien écrites pour vous donner le représentant que vous méritez. –

+0

Si vous voulez, merci. Pas nécessaire cependant. J'ai supprimé ma réponse parce qu'il vaut mieux guider que corriger, et vous l'avez fait ici. –

0

La première erreur fait référence à la ligne 10.

Ainsi, regardez la ligne 10:

InitApplication(HINSTANCE); 

La déclaration n'a pas un type de résultat de la fonction.

Et ainsi de suite.

Vive & HTH,

+0

mais cela vient de la bibliothèque MSDN Il devrait fonctionner, non? Http: //msdn.microsoft.com/en-us/library/ms633575 (v = VS.85) .aspx – Grey

+1

@Grey: Il peut avoir compilé à un point dans le temps, où le spécificateur int par défaut (Dans certains endroits, C/C++ suppose 'int' si vous ne spécifiez pas de type) était exactement la même chose qu'un BOOL. Mais les temps ont changé, et Microsoft n'a pas mis à jour son code exemple (minable). BTW, n'utilisez pas le comportement default-int. Peu ou personne ne l'utilise plus. –

+1

@Merlyn: Les exemples pour l'API Win32 traditionnelle sont tous écrits en C. Et les types par défaut sont l'un des domaines où l'expression "C/C++" n'est pas utile, puisque C++ agit très différemment de C à cet égard. –

Questions connexes