Консольное приложение Win32

Тема в разделе "MS Visual C++", создана пользователем pashqa, 5 фев 2009.

  1. pashqa

    pashqa Гость

    Всем привет!!! У меня такой вопрос: возможно ли изменить размер шрифта в консольном приложении ?
    Предыдущей проблемой было изменить цвет\фон шрифта, с ней успешно справилисьAPI-функции для
    консольных приложений. Но просматрев все(http://win-api.narod.ru/a0821.htm) эти фунции я ненашел ни одной,
    которая может менять шрифт! Кто-нибудь знает как реализовать сие чудо !? Спасибо за внимание)))
     
  2. @LE}{@NDER

    @LE}{@NDER Гость

    Читай в МСДНе про функцию SetCurrentConsoleFontEx и про структуру CONSOLE_FONT_INFOEX
    Вот вырезка:

    Код (Text):
    BOOL WINAPI SetCurrentConsoleFontEx(
    __in         HANDLE hConsoleOutput,
    __in         BOOL bMaximumWindow,
    __in         PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx
    );
    Parameters
    hConsoleOutput
    A handle to the console screen buffer. The handle must have the GENERIC_WRITE access right. For more information, see Console Buffer Security and Access Rights.

    bMaximumWindow
    If this parameter is TRUE, font information is set for the maximum window size. If this parameter is FALSE, font information is set for the current window size.

    lpConsoleCurrentFontEx
    A pointer to a CONSOLE_FONT_INFOEX structure that contains the font information.

    Return Value
    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.


    Код (Text):
    typedef struct _CONSOLE_FONT_INFOEX {
    ULONG cbSize;
    DWORD nFont;
    COORD dwFontSize;
    UINT FontFamily;
    UINT FontWeight;
    WCHAR FaceName[LF_FACESIZE];
    } CONSOLE_FONT_INFOEX,
    *PCONSOLE_FONT_INFOEX;
    Members
    cbSize
    The size of this structure, in bytes.

    nFont
    The index of the font in the system's console font table.

    dwFontSize
    A COORD structure that contains the width and height of each character in the font, in logical units. The X member contains the width, while the Y member contains the height.

    FontFamily
    The font family.


    This parameter can be one of the following values:

    FF_DECORATIVE
    FF_DONTCARE
    FF_MODERN
    FF_ROMAN
    FF_SCRIPT
    FF_SWISS

    FontWeight
    The font weight. The weight can range from 100 to 1000, in multiples of 100. For example, the normal weight is 400, while 700 is bold.

    FaceName
    The name of the typeface (such as Courier or Arial).

    Remarks
    To obtain the size of the font, pass the font index to the GetConsoleFontSize function.
     
  3. Dimmuborgir

    Dimmuborgir Гость

    CreateFont, затем SelectObject. Работаем с контекстом.

    Прошу прощения, не увидел что приложение консольное. мой ответ был для WinAPI приложения, не консольного.
     
  4. pashqa

    pashqa Гость

    Вот еще вырезка от туда же:
    У меня WindowsXP...
    Я попробовал прописать структуру CONSOLE_FONT_INFOEX, на что VC++6
    сказал, что про такую неразу неслышал ^_^
    Вот еще нашел структуру CONSOLE_FONT_INFO, но VC++ 6 тоже про неё
    ничего незнает(Windows.h подключил).... <_<
     
  5. @LE}{@NDER

    @LE}{@NDER Гость

    Ну, что ж сказать на это... херово.
    Попробуй поиграться с реестром HKEY_CURRENT_USER\Console\ там есть параметр FontSize - может это что-то даст
     
  6. pashqa

    pashqa Гость

    А ты не мог бы изобразить, как это можно сделать, а то я без понятия вообще... ;)
     
  7. @LE}{@NDER

    @LE}{@NDER Гость

    Ну вот. Только тебе придется думать, как консоль рефрешнуть после этого или запустить отдельным процессом. В этом коде сугубо редактирование ключа, который отвечает за консоль. Кроме этого можешь поиграться со значениями в родительском ключе Console - там есть значения отвечающие за цвета. Ну и в конце концов нужно позаботиться о том, чтобы потом все вернуть назад, поскольку значения применятся ко всем консолям.

    [codebox]
    #include <windows.h>
    #include <iostream>
    using namespace std;

    void UpdateReg(HKEY hk, LONG lret)
    {
    DWORD pbuf1;

    TCHAR* pbuf=_T("Lucida Console");
    lret=RegSetValueEx ( hk, _T("FaceName"), NULL, REG_SZ,(LPBYTE)pbuf, strlen(pbuf));

    pbuf1 = 0x36;
    lret=RegSetValueEx ( hk, _T("FontFamily"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    pbuf1 = 0x100000; //Размер шрифта
    lret=RegSetValueEx ( hk, _T("FontSize"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    pbuf1 = 0x190;
    lret=RegSetValueEx ( hk, _T("FontWeight"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    pbuf1 = 0x0;
    lret=RegSetValueEx ( hk, _T("HistoryNoDup"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    pbuf1 = 0x800;
    lret=RegSetValueEx ( hk, _T("QuickEdit"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    pbuf1 = 0x88008e;
    lret=RegSetValueEx ( hk, _T("WindowPosition"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    pbuf1 = 0x1e0053;
    lret=RegSetValueEx ( hk, _T("WindowSize"), NULL, REG_DWORD,(LPBYTE)&pbuf1, sizeof(DWORD));

    RegCloseKey(hk);
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    HKEY hk;

    LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
    _T("Console\\%SystemRoot%_system32_cmd.exe"),
    NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
    if(lret==ERROR_SUCCESS&&NULL!=hk)
    {
    UpdateReg(hk, lret);
    }
    else
    {
    if(RegCreateKey(HKEY_CURRENT_USER, _T("Console\\%SystemRoot%_system32_cmd.exe"), &hk)==ERROR_SUCCESS)
    {
    LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
    _T("Console\\%SystemRoot%_system32_cmd.exe"),
    NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
    if(lret==ERROR_SUCCESS&&NULL!=hk)
    UpdateReg(hk, lret);
    }
    else
    ::MessageBox(NULL, "Error", "ERROR", MB_OK);
    }
    return 0;
    }
    [/codebox]

    ЗЫ: Да неприятная особенность, это то, что в ХРшке похоже поддерживается только один шрифт из семейства TrueType - Lucida Console. Это видно, по крайней мере из настроек консоли.
     
  8. pashqa

    pashqa Гость

    Спасибо за ответ :D !!!
    Но такое дело меня неустраивает, так что придется искать другой вариант!! :(
     
  9. @LE}{@NDER

    @LE}{@NDER Гость

    Ну вот, так бы сразу и сказал, а то нафиг я мучился? :(
     
  10. pashqa

    pashqa Гость

    Я же незнал всего этого, что ты мне сказал :) !!
    За что тебе Спасибо)))) :D
     
  11. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    спамье
     
Загрузка...

Поделиться этой страницей