我用C++的头文件<fstream>里的ifstram从.txt文件里读取数据信息,代码放在API中的wm_crete:地下,读取的数据放在数组lpbuff中,我后来在API中的wm_paint:消息响应地下用drawtext函数想把数组lpbuff的内容输出出来,结果编译成功了,就是没有结果数据显示在界面上,问:这是为什么你?C++能和API混合编程吗?有相关的教材书籍提供参考吗?
调试欢乐多
不知道lz 的工程是unicode 的把!
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; //返回假,表示消息未被用户处理,由缺省消息处理函数去处理
}