我用C++的头文件<fstream>里的ifstram从.txt文件里读取数据信息,代码放在API中的wm_crete:地下,读取的数据放在数组lpbuff中,我后来在API中的wm_paint:消息响应地下用drawtext函数想把数组lpbuff的内容输出出来,结果编译成功了,就是没有结果数据显示在界面上,问:这是为什么你?C++能和API混合编程吗?有相关的教材书籍提供参考吗?

解决方案 »

  1.   

    drawtext的LPCTSTR也有char
    不知道lz 的工程是unicode 的把! 
      

  2.   

    你说的 API 是什么?  是 windows API 吗?
      

  3.   

    可以混着写api 本来就是用c写出来的!
      

  4.   

    包含windows.h或其他的头文件,直接用就行了
      

  5.   


    windows 下 C 和 C++ 编程,除了内部逻辑,其他都是通过调用 API 实现的,如 GUI界面,网络等。WIN API 本来就是 C 写成的库,直接调用就可以了。仅需要引入相关的头文件即可。一般, #include <windows.h> 就可以使用大部分的 WINDOWS API 了。
    给你一个简单的基于 对话框 的 WINDOWS 程序。
    #include <windows.h>
    #include "resource.h"
    //VC6 以上使用 Unicode 编码,因此需要将 char 变为 wchar_t ,同时在直接字符串前面加 L
    const wchar_t szDlgTitle[] = L"基于对话框的 windows SDK 程序模板";// 对话框消息处理函数
    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
              
    //程序的进入函数,用于创建 对话框
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_APP), NULL, DlgProc);
    return 0;
    }//将窗体在屏幕上居中显示
    void CenterWindows(const HWND &hWnd) {
    int scrWidth = GetSystemMetrics(SM_CXSCREEN);//屏幕宽度
    int scrHeight = GetSystemMetrics(SM_CYSCREEN);//屏幕高度
    RECT rect;  
    GetWindowRect(hWnd, &rect); //获取控件变化前大小
    rect.left = (scrWidth-rect.right)/2;
    rect.top = (scrHeight-rect.bottom)/2;
    SetWindowPos(hWnd,HWND_TOP,rect.left,rect.top,rect.right,rect.bottom,SWP_SHOWWINDOW);
    }//TEXT() 宏用来将直接的 char* 变为 LPCWSTR
    //当然直接字符串前面加 L 也没问题
    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message)
    {
    //对话框初始化消息
    case WM_INITDIALOG:

    SetWindowText(hDlg, szDlgTitle); // 设置对话框标题
    CenterWindows(hDlg); //窗口居中
    return TRUE; //返回真,表示消息被处理了。

    //对话框内部控件的 消息处理
    case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    //处理 IDCANCEL 的消息
    case IDCANCEL:
    EndDialog(hDlg, LOWORD(wParam)); //使用EndDialog关闭对话框
    return TRUE; //返回真,表示消息被处理了。
    }
    break; }
    return FALSE; //返回假,表示消息未被用户处理,由缺省消息处理函数去处理
    }