首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教一个有关api编程的问题 [已结贴,结贴人:dhjunwf2002]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dhjunwf2002
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-05-23 23:01:12 楼主
    想不通为什么下列程序中的"good night"显示不出来,请求指点
    #include <windows.h>
    #include <stdio.h>
    LRESULT  CALLBACK  WndProc(HWND,UINT,WPARAM,LPARAM);

    int  WINAPI  WinMain(HINSTANCE  hInstance,  HINSTANCE  hPrevInstance,PSTR  szCmdLine,  int  iCmdShow)

    {
    MessageBox(NULL,TEXT ( "Hello  World "), TEXT( "Hello "), 0) ; 

    printf("%s\n","good night");

    return 0;
    }
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hastings
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-23 23:06:031楼 得分:0
    靠,界面编程中,printf是没用的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mscf
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-23 23:11:482楼 得分:0
    Windows图形应用就不能用标准输入输出了,图形应用使用消息循环来驱动应用,控制台程序才用这个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gaosen_bit
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-23 23:14:353楼 得分:20
    在windows程序里,要想像在console程序那样输出,需要自行分配一个console,需用到api函数AllocConsole并且还需要将stdout重定向至该console,这方面的内容,请楼主参考:
    C/C++ code
    /* ============= Con_Init it will do the apropriate things. ============= */ void Con_Init(void) { #ifdef __CONSOLE_ATTACHED int hConHandle; long lStdHandle; CONSOLE_SCREEN_BUFFER_INFO coninfo; FILE *fp; // allocate a console for this app AllocConsole(); // set the screen buffer to be big enough to let us scroll text GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); coninfo.dwSize.Y = MAX_CONSOLE_LINES; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); // redirect unbuffered STDOUT to the console lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen( hConHandle, "w" ); *stdout = *fp; setvbuf( stdout, NULL, _IONBF, 0 ); // redirect unbuffered STDIN to the console lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen( hConHandle, "r" ); *stdin = *fp; setvbuf( stdin, NULL, _IONBF, 0 ); // redirect unbuffered STDERR to the console lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen( hConHandle, "w" ); *stderr = *fp; setvbuf( stderr, NULL, _IONBF, 0 ); #endif }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dhjunwf2002
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-23 23:50:324楼 得分:0
    其实我就是从原理上搞不清win32 application 和 win32 console application 之间的区别,为什么象printf()和strcmp()这类“库函数”在win32 application 中不能用,上面的程序在“编译 连接 执行”时都没有出现问题,hollow world 窗口显示很好。
    是不是说,api函数和库函数 永远都不能在一起“混用”?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBSpine
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-24 01:10:465楼 得分:0
    关于两种类型的区别,楼主可以看下《Windows核心编程》
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • coding_hello
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-24 04:36:366楼 得分:0
    引用 4 楼 dhjunwf2002 的回复:
    其实我就是从原理上搞不清win32 application 和 win32 console application 之间的区别,为什么象printf()和strcmp()这类“库函数”在win32 application 中不能用,上面的程序在“编译 连接 执行”时都没有出现问题,hollow world 窗口显示很好。
    是不是说,api函数和库函数 永远都不能在一起“混用”?


    两回事。printf需要一个std来输出,界面程序中没有,所以不能用。除非主动分配一个console,参见上面哥们的代码。

    而strcmp就不需要console,只是用来比较两个char*,可以用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • birchlin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-24 09:42:487楼 得分:0
    引用 6 楼 coding_hello 的回复:
    引用 4 楼 dhjunwf2002 的回复:
    其实我就是从原理上搞不清win32 application 和 win32 console application 之间的区别,为什么象printf()和strcmp()这类“库函数”在win32 application 中不能用,上面的程序在“编译 连接 执行”时都没有出现问题,hollow world 窗口显示很好。 
    是不是说,api函数和库函数 永远都不能在一起“混用”?


    两回事。printf需要一个std来输出,界面程序中没有,所以不能用。除非主动分配一…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dhjunwf2002
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-24 09:58:278楼 得分:0
    还是有点糊涂,但是我把程序写成下面这样,就可以运行地很好,先跳出一个窗口,点“确定”后,黑屏显示“good night”,好象两种函数不冲突,但不知为什么;

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

    void main()

    {
    MessageBox(NULL,TEXT ( "Hello  World "), TEXT( "Hello "), 0) ; 

    printf("%s\n","good night");


    }
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved