hur.cn - 华软网

 热门搜索

帮看代码错误

  作者:未知    来源:网络    更新时间:2011/9/30
C++">
#include <windows.h>
#include "resource.h"

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

int WINAPI WinMain (
HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
{
static char cAppName[] = "xxx" ;
WNDCLASS wndcls ;
HWND hwnd ;
MSG msg ;

wndcls.cbClsExtra = 0 ;
wndcls.cbWndExtra = DLGWINDOWEXTRA ;
wndcls.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndcls.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndcls.hIcon = LoadIcon (hInstance, cAppName) ;
wndcls.hInstance = hInstance ;
wndcls.lpfnWndProc = WndProc ;
wndcls.lpszClassName = NULL ; 
wndcls.lpszMenuName = cAppName ;
wndcls.style = CS_HREDRAW | CS_VREDRAW ;

RegisterClass (&wndcls) ;

hwnd = CreateDialog (hInstance, cAppName, 0, NULL) ;

ShowWindow (hwnd, nCmdShow) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE :
PlaySound ("xxx.wav", NULL, SND_FILENAME | SND_ASYNC) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}



为什么对话框创建了后,没有playsound,点右上角的叉叉也不能推出
我感觉wndproc根本没响应啊
---华软 网友回答---
标有数字是修改过的
C++">
   #include <windows.h>
#include "resource.h"
#include "mmsystem.h" //1

#pragma comment (lib,"winmm") //2

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

int WINAPI WinMain (
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
    static char cAppName[] = "xxx" ;
    WNDCLASS wndcls ;
    HWND hwnd ;
    MSG msg ;

    wndcls.cbClsExtra = 0 ;
    wndcls.cbWndExtra = DLGWINDOWEXTRA ;
    wndcls.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndcls.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndcls.hIcon = LoadIcon (hInstance, cAppName) ;
    wndcls.hInstance = hInstance ;
    wndcls.lpfnWndProc = WndProc ;
    wndcls.lpszClassName = cAppName ; //3
    wndcls.lpszMenuName = NULL ;
    wndcls.style = CS_HREDRAW | CS_VREDRAW ;

    RegisterClass (&wndcls) ;

//4
hwnd = CreateWindow(cAppName,cAppName,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);


    ShowWindow (hwnd, nCmdShow) ;

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

    return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE :
        PlaySound ("xxx.wav", NULL, SND_FILENAME | SND_ASYNC) ;
        return 0 ;
    case WM_DESTROY :
        PostQuitMessage (0) ;
        return 0 ;

    }

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


---华软网友回复---
你的代码是建立窗口的基本框架
若是建立对话框的话,需要删减代码
---华软网友回复---
PlaySound里的第一个参数改用绝对路径试试?
---华软网友回复---
C++">
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL,
              DialogProc);
}

INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CREATE :
        PlaySound ("xxx.wav", NULL, SND_FILENAME | SND_ASYNC) ;
        return 0 ;
    case WM_DESTROY :
        PostQuitMessage (0) ;
        return 0 ;
    }

    return (INT_PTR)FALSE
}


这是直接
---华软网友回复---
引用 4 楼 huangcheng90 的回复:
C/C++ code

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UN……

错了 是
case WM_INITDIALOG:
  PlaySound ("xxx.wav", NULL, SND_FILENAME | SND_ASYNC) ;
  return 0 ;
---华软网友回复---
引用 5 楼 huangcheng90 的回复:
引用 4 楼 huangcheng90 的回复:
C/C++ code

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR    lpCmdLine,
int       nCmdShow)
{
UN……

错了 是
case WM_INITDIALOG:
  PlayS……


不对  wndproc里面的msg都没响应
---华软网友回复---
引用 4 楼 huangcheng90 的回复:
C/C++ code

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFER……


我要用窗口产生的方法创建对话框
---华软网友回复---
引用 1 楼 gameslq 的回复:
标有数字是修改过的
C/C++ code

   #include <windows.h>
#include "resource.h"
#include "mmsystem.h" //1

#pragma comment (lib,"winmm") //2

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

int WINAPI……


我要用窗口产生的方法创建对话框
---华软网友回复---
hWnd = CreateDialog( hInstance, MAKEINTRESOURCE(IDD_XXXXX), NULL, (DLGPROC)WndProc);

---华软网友回复---
.rc 里面少了 CLASS "XXX" 这项 自己解决了 谢谢      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。