| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:简单Windows编程问题,为什么没错误,但是没有运行结果?
只看楼主 加入收藏
papaxiong
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-7-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
简单Windows编程问题,为什么没错误,但是没有运行结果?
为什么没有运行结果?没有窗口弹出!而且似乎是停在了UpdateWindow处就不走了
#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("HellowWin");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;
    wndclass.style         =CS_HREDRAW|CS_VREDRAW;
    wndclass.cbClsExtra    =0;
    wndclass.cbWndExtra    =0;
    wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.hCursor       =LoadCursor(NULL,IDC_ARROW) ;
    wndclass.hIcon         =LoadCursor(NULL,IDI_APPLICATION);
    wndclass.hInstance     =hInstance;
    wndclass.lpfnWndProc   =WndProc;
    wndclass.lpszClassName =szAppName;
    wndclass.lpszMenuName  =NULL;
   

    if(!RegisterClass(&wndclass))
    {
        MessageBox(NULL,"This Program Requires Windows NT!",szAppName,MB_ICONERROR);
        return 0;
    }

    hwnd=CreateWindow(szAppName,
        TEXT("The Hello Program"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL);


     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_PAINT:
          hdc=BeginPaint(hwnd,&ps);

          GetClientRect(hwnd,&rect);

          DrawText(hdc,"HEllo World",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
          EndPaint(hwnd,&ps);
        return 0;
      case WM_DESTROY:
          PostQuitMessage(0);
        return 0;
      default :
          return DefWindowProc(hwnd,message,wParam,wParam);
    }
    return 0;
}
搜索更多相关主题的帖子: 运行 结果 Windows 
2010-09-05 21:25
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
CreateWindow一直失败,但调试不出来是哪里的问题,真够奇怪的

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-09-05 22:30
S_12s
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:110
专家分:670
注 册:2010-7-21
收藏
得分:6 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevinstance,PSTR szCmdLine,int iCmdShow)中的PSTR是不是错了?
wndclass.hIcon         =LoadCursor(NULL,IDI_APPLICATION);  这个是不是错了……
我调试的时候发现在  wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);中,wndclass.hbrBackground中的值为空……
没找到解决方案……
2010-09-05 23:21
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:6 
楼主,请严重注意这一行:
return DefWindowProc(hwnd,message,wParam,lParam);

按上面这行原样抄回去就可以了,真是的。。。。。。浪费了我好多时间

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-09-05 23:47
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:6 
应该是有运行的,你生成以后,运行,在任务管理器中看看。

CreateWindow函数需要发送4个WM消息,系统调用你的窗口过程去处理,因为你的窗口
过程里没有自己定义,所以会调用DefWindowProc默认处理,你把参数写错了,所以凡是
return DefWindowProc的,都没结果。 但是你的程序还是在运行,消息循环还是正常
的,你写的两个case也会正常被调用,但是因为连窗口都出不来,想用都没法用了。

这样的手误是小问题,不过很难发现。一是学会调试,VC本身自带的调试功能还是比较强大的,只不过想用好是比较困难。
二是用些辅助工具,比如VAX,有自动完成 函数提示 参数提示 等等很有用的功能,用辅助工具比较省事,因为这样的问题,只有跟进到CreateWindow内部才能发现。倒不如从源码上注意。SO。。。强烈推荐VAX

这版里很少见C和winAPI的问题 偶也在学习windows编程 楼主记得多来哇

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-09-06 12:21
快速回复:简单Windows编程问题,为什么没错误,但是没有运行结果?
数据加载中...
 
   



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

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