| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2147 人关注过本帖
标题:新人报道,顺便给出我的第一个问题,请大神们多多关照
只看楼主 加入收藏
BCCN_xkx
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-9-10
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
新人报道,顺便给出我的第一个问题,请大神们多多关照
先在这给各位问声好!
接下来我们来讨论一个问题,我刚开始学习vc++,按照书上的代码,写出了我的第一个程序,可是运行不对,具体就是窗口类注册失败,代码如下:
   
int WINAPI WinMain(HINSTANCE  hInstance,HINSTANCE  hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
       ...

        WNDCLASS wndcls;

    wndcls.cbClsExtra    = 0;
    wndcls.cbClsExtra    = 0;
    wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wndcls.hCursor       = LoadCursor(NULL,IDC_CROSS);
    wndcls.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
    wndcls.hInstance     = hInstance;
    wndcls.lpfnWndProc   = WinSunPROC;
    wndcls.lpszClassName = "xu";
    wndcls.lpszMenuName  = NULL;
    wndcls.style         = CS_HREDRAW | CS_VREDRAW;

    if (RegisterClass(&wndcls) == 0)
    {
        DWORD dw = GetLastError();    //87:参数无效
        MessageBox(NULL, TEXT("窗口类注册失败!"), TEXT("提示"), MB_OK);
        return 1;
    }
        ...
}

得到的错误代码为87,说是无效的参数,可是我检查过,结构体的参数初始化没错啊~~~,求大神解答。
ps.win10 和 win7 系统都试过了,结果一样。
ps.代码参考的是孙鑫的vc++书上的。
2015-09-10 17:26
BCCN_xkx
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-9-10
收藏
得分:0 
下面是全部的代码:
有兴趣的朋友复制运行一下,看看结果。

#include <stdio.h>
#include <windows.h>

LRESULT CALLBACK WinSunPROC(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CHAR:                                        //字符事件
        {
            char szChar[20];
            sprintf(szChar, "char is %d", wParam);
            MessageBox(hwnd, szChar, "hh", 0);
        }break;
        case WM_NCLBUTTONDOWN:                               //鼠标左键按下事件
        {
            MessageBox(hwnd, "mouse clicked", "hh", 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, "第一课", strlen("第一课"));
            EndPaint(hwnd, &ps);
        }break;
        case WM_CLOSE:                                    //窗口关闭事件                                 
        {
            if (IDYES == MessageBox(hwnd, "是否真的结束?", "hh", MB_YESNO))
            {
                DestroyWindow(hwnd);                     //销毁该窗口
            }
        }break;
        case WM_DESTROY:                                 //窗口销毁事件  
        {
          PostQuitMessage(0);                            //往本线程的消息队列中发送一个。。。
        }break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(
    HINSTANCE  hInstance,
    HINSTANCE  hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
    WNDCLASS wndcls;

    wndcls.cbClsExtra    = 0;
    wndcls.cbClsExtra    = 0;
    wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wndcls.hCursor       = LoadCursor(NULL,IDC_CROSS);
    wndcls.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
    wndcls.hInstance     = hInstance;
    wndcls.lpfnWndProc   = WinSunPROC;
    wndcls.lpszClassName = "xu";
    wndcls.lpszMenuName  = NULL;
    wndcls.style         = CS_HREDRAW | CS_VREDRAW;

    if (RegisterClass(&wndcls) == 0)
    {
        DWORD dw = GetLastError();    //87:参数无效
        MessageBox(NULL, TEXT("窗口类注册失败!"), TEXT("提示"), MB_OK);
        return 1;
    }

    HWND hwnd;
    hwnd = CreateWindow("xu", "测试", WS_OVERLAPPEDWINDOW, 10, 10, 600, 400, NULL, NULL, hInstance,NULL);

    if (hwnd)
    {
        ShowWindow(hwnd, SW_SHOWNORMAL);
    }
    else
    {
        DWORD dw = GetLastError();    //1407 :找不到窗口类别。
        MessageBox(NULL, TEXT("创建窗口失败!"), TEXT("提示"), MB_OK);
        UnregisterClass("xu", hInstance);  //移除注册
        return 1;
    }

    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
2015-09-10 17:48
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:20 
仔细对照一下书上代码看看有没有抄错抄漏

一片落叶掉进了回忆的流年。
2015-09-10 23:41
sanjina
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2015-8-16
收藏
得分:0 
刚开始学就找一个这么复杂的代码,太牛了。
我刚入门,还正在爬行呢。
2015-09-19 07:15
快速回复:新人报道,顺便给出我的第一个问题,请大神们多多关照
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022838 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved