首页
社区
课程
招聘
[求助]典型的窗口实例我也遇到问题.
发表于: 2007-12-28 20:25 3769

[求助]典型的窗口实例我也遇到问题.

2007-12-28 20:25
3769
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
        WNDCLASS wndcls;
        wndcls.cbClsExtra=0;
        wndcls.cbWndExtra=0;
        wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
        wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
        wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
        wndcls.hInstance=hInstance;
        wndcls.lpfnWndProc=WinSunProc;
        wndcls.lpszClassName="sunxin2006";
        wndcls.lpszMenuName=NULL;
        wndcls.style=CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&wndcls);

        HWND hwnd;
        hwnd=CreateWindow("sunxin2006","http://www.sunxin.org",WS_OVERLAPPEDWINDOW,
                0,0,600,400,NULL,NULL,hInstance,NULL);

        ShowWindow(hwnd,SW_SHOWNORMAL);
        UpdateWindow(hwnd);

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

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
        switch(uMsg)
        {
        case WM_CHAR:
                char szChar[20];
                sprintf(szChar,"char code is %d",wParam);
                MessageBox(hwnd,szChar,"char",0);
                break;
        case WM_LBUTTONDOWN:
                MessageBox(hwnd,"mouse clicked","message",0);
                HDC hdc;
                hdc=GetDC(hwnd);
                TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
                //ReleaseDC(hwnd,hdc);
                break;
        case WM_PAINT:
                HDC hDC;
                PAINTSTRUCT ps;
                hDC=BeginPaint(hwnd,&ps);
                TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));
                EndPaint(hwnd,&ps);
                break;
        case WM_CLOSE:
                if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
                {
                        DestroyWindow(hwnd);
                }
                break;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
        default:
                return DefWindowProc(hwnd,uMsg,wParam,lParam);
        }
        return 0;
}

弱弱的问一句大家,在获取消息的循环后,return msg.wParam;是什么意思?我试了改成return 0;也是正确的.我就纳闷了为什么要return返回消息的参数一???
在此例子中具体起到了什么作用呀.
有请大虾不惜赐教!希望得到详细点的回答

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 408
活跃值: (173)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
没什么作用。只不过函数需要有一个返回值罢了
2007-12-29 00:43
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
3
呵呵,这个返回值,你随便写,是什么都行。
2007-12-29 14:08
0
雪    币: 424
活跃值: (1989)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
return msg.wParam;
中的msg.wParam就是PostQuitMessage()的参数,如果你在不同的地方以不同的参数多次调用了PostQuitMessage()的话,并且你又想在程序退出后好让其它程序检查这个参数的话,那就用
return msg.wParam;
来结束WinMain。不想检查的就直接return 0;咯
PostQuitMessage(5)其实就等于SendMessage(hWnd, WM_QUIT, 5, 0),最后的msg.wParam就是这里的5咯
2007-12-29 14:21
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
PostQuitMessage不是用来摧毁窗口后的退出消息循环用途的吗?调用它能干些什么?

return msg.wParam这个消息中的参数是返回到哪里去的??存在内存中吗?
2007-12-30 01:31
0
游客
登录 | 注册 方可回帖
返回
//