2012-01-14 216 views
1

一开始我有:GetCurrentConsoleFont未在范围内声明,我做错了什么?

#include <sstream> 
#include <iostream> 
#include <stdio.h> 
#include <iomanip> 
#include <string> 
#define _WIN32_WINNT 0x500 //tells that this is win 2000 or higher, without GetConsoleWindow would not work 
#include <windows.h> 

using namespace std; 

int main() { 
    PCONSOLE_FONT_INFO lpConsoleCurrentFont; 
    GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, lpConsoleCurrentFont); 
    return 0; 
} 

和无证功能SetConsoleFont的作品,但在编译GetCurrentConsoleFont失败,称这是不是在这个范围内声明。

- 编辑:改为自持代码。

+1

_Testcase_,请。 – 2012-01-14 23:57:02

+0

我只是试了一下,它的工作 – 2012-01-14 23:58:29

+0

好吧,我把它改为自持码,它工作吗? – rsk82 2012-01-15 00:04:09

回答

4

GetCurrentConsoleFont至少在NT4 +上导出,MinGW标头必须是错误的。

尝试添加该代码后您的#包括的:

#ifdef __cplusplus 
extern "C" { 
#endif 
BOOL WINAPI GetCurrentConsoleFont(HANDLE hConsoleOutput,BOOL bMaximumWindow,PCONSOLE_FONT_INFO lpConsoleCurrentFont); 
#ifdef __cplusplus 
} 
#endif 

您的代码也是错误的,它应该是:

CONSOLE_FONT_INFO ConsoleFontInfo; 
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, &ConsoleFontInfo); 

(任何时候你看到PSOMETYPE作为参数,你通常分配SOMETYPE结构堆栈并传递指向该结构体的指针作为参数)

+0

嗯,你是否确定*它在XP之前的版本上可用?我意识到目前的MSDN文档通常都是关于最低版本的,但我在旧版MSDN文档中找不到任何证据表明它是在XP之前按名称导出的。 – 2012-01-15 09:08:33

+0

@CodyGray:是的,我检查了导出表(这个字体索引设计看起来有点愚蠢,可能记录为解决方案的一部分,在Vista中增加了敏感的Ex版本...) – Anders 2012-01-15 21:29:54

2

Hans上面评论是正确的。 GetCurrentConsoleFont未在wincon.h中定义。将以下行添加到wincon.h以获得此功能:

BOOL WINAPI GetCurrentConsoleFont(HANDLE,BOOL,PCONSOLE_FONT_INFO);

COORD WINAPI GetConsoleFontSize(HANDLE,DWORD);

GetConsoleFontSize也丢失。