Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Позиция консольного окна на экране (рабочем столе)


Автор: semibug 29.5.2009, 02:03
Подскажите пожалуйста, как правильно задать позицию для консоли на экране (на рабочем столе)

Автор: 586 29.5.2009, 03:45
a. Указывается перед вызовом CreateProcess в структуре STARTUPINFO.
b. С помощью SetWindowPos(GetConsoleWindow(), ...)
Код
#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("Press enter for move window");
    getchar();
    SetWindowPos(GetConsoleWindow(), 0,
        50, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    printf("Press enter for exit");
    getchar();
    return 0;
}

Автор: Cheloveck 29.5.2009, 08:21
Код

    HWND hWnd = GetConsoleWindow();
    SetWindowPos(hWnd, 0, 500, 500, 500, 500, 0);

Автор: semibug 30.5.2009, 01:30
OK, отлично. Спасибо!
А как поступить в Windows98 ? (получить хэндл окна консоли. В описании GetConsoleWindow(); пишут: Requires Windows XP or Windows 2000 Professional.)

Автор: semibug 30.5.2009, 14:39
Возможно такой вариант подойдет (под 98 не проверял, под XP работает):

Код

HWND CConsole::GetHWnd()
{
    char    title[256];
    char    newtitle[256];
    wchar_t lpsz[256];


    // Создаем GUID
    GUID    guid;
    HRESULT hr = CoCreateGuid( &guid );
    if ( FAILED( hr ) )
        return NULL;

    // Конвертируем его в текстовое представление (UNICODE)
    int size = StringFromGUID2( ( REFGUID ) guid, lpsz, 256 );

    // Конвертируем UNICODE в ANSI
    wcstombs( newtitle, lpsz, size );

    // Сохраняем текущий заголовок консоли
    if ( !GetConsoleTitle( title, sizeof( title ) ) )
        return NULL;

    // Устанавливаем уникальный заголовок 
    if ( !SetConsoleTitle( newtitle ) )
        return NULL;

    Sleep( 40 );


    HWND hwnd = FindWindow( NULL, newtitle );

    if ( !hwnd )
        return NULL;


    if ( !SetConsoleTitle( title ) )
        return NULL;

    Sleep( 40 );

    // Проверяем правильность найденного хэндла окна

    GetWindowText( hwnd, newtitle, sizeof( newtitle ) );
    if ( lstrcmp( title, newtitle ) )
        return NULL;

    return hwnd;
}


Смысл в том, чтобы назначить заголовку окна уникальный текст, а затем найти окно с таким заголовком.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)