A problem with CreateWindow

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("HelloWin") ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))

{

MessageBox (NULL, TEXT ("This program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd = CreateWindow (szAppName, // window class name

TEXT ("The Hello Program"), // window caption

WS_OVERLAPPEDWINDOW, // window style

CW_USEDEFAULT, // initial x position

CW_USEDEFAULT, // initial y position

CW_USEDEFAULT, // initial x size

CW_USEDEFAULT, // initial y size

NULL, // parent window handle

NULL, // window menu handle

hInstance, // program instance handle

NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC hdc ;

PAINTSTRUCT ps ;

RECT rect ;

switch (message)

{

case WM_CREATE:

PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;

return 0 ;

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

______________________________________________________________________
I have a problem with this little program about createwindow: This is the error list of the compiler:

------ Build started: Project: prova2, Configuration: Release Win32 ------

Linking...

prova2.obj : error LNK2001: unresolved external symbol __imp__PlaySoundW@12

C:\Documents and Settings\Poggio\Documenti\Visual Studio 2005\Projects\prova2\Release\prova2.exe : fatal error LNK1120: 1 unresolved externals

Build log was saved at "file://c:\Documents and Settings\Poggio\Documenti\Visual Studio 2005\Projects\prova2\prova2\Release\BuildLog.htm"

prova2 - 2 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
______________________________________________________________________________________________
______________________________________________________________________________________________
And these are the suggestions that I read on the Petzold:

A couple of warnings: If you use Microsoft Visual C++ to create a new project for this program, you need to

make an addition to the object libraries the linker uses. Select the Settings option from the Project menu, and

pick the Link tab. Select General from the Category list box, and add WINMM.LIB ("Windows multimedia") to

the Object/Library Modules text box. You need to do this because HELLOWIN makes use of a multimedia

function call, and the multimedia object library isn't included in a default project. Otherwise you'll get an error

message from the linker indicating that the PlaySound function is unresolved.
______________________________________________________________________
______________________________________________________________________
I tried to open the project->properties->linker->general->additional library directories  and  adding the file lib/winmm.lib But i think it's not so good...I think I'm wrong.

Thankyou



Answer this question

A problem with CreateWindow

  • James Moore - Visionspring

    Please remember that the linker tool uses the LIB environment variable and that is set to $(Platform SDK Dir)\lib. This means that you can access anything inside the lib directory directly without giving the path. The only time you need to change this is if the library is in a subdirectory.
    A good example of this is for includes, where headers inside the sys directory are required to have #include <sys/time.h> it would be similar with lib.

  • Maria24

     surfcaster wrote:

    I tried to open the project->properties->linker->general->additional library directories  and  adding the file lib/winmm.lib But i think it's not so good...I think I'm wrong.


    No you are not wrong. Just write winmm.lib into the additional library field. Not with the prefix lib\!

  • A problem with CreateWindow