{{notification.text}}

MirGames

12.02.08 17:51
0
Пишу щя небольшую тулзу, и вот что интересно - возможно ли сменить стиль UI например на XP(Vista) Default, а то 98 как то не оч. смотрится...
MSVC++
P.S. Когда работал в Delphi, то там достаточно было переместить на форму компонент XP Style(вроде так называется), а вот как это сделать на WinApi?
#1
Студент
12.02.08 17:58
0
Цитата(EvilDev @ Сегодня, 10:51)
[snapback]75625[/snapback]
Пишу щя небольшую тулзу

Дык, небольшие тулзы, как раз наоборот, обычно пишут на Delphi.
#2
12.02.08 18:06
0
>> Дык, небольшие тулзы, как раз наоборот, обычно пишут на Delphi.
Так мне именно надо на С++. Зачем делать двойную работу, если код написанный на Delphi мне понадобится и в C++(не только в тулзе)
#3
Хранитель Флейма
12.02.08 19:08
0
EvilDev
Скинуть XPmanifest в папку с эксешником или запакаовать его как ресурс.

Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
  manifestVersion="1.0">
<assemblyIdentity
    name="CiaoSoftware.Ciao.Shell.Contacts"
    processorArchitecture="x86"
    version="5.1.0.0"
    type="win32"/>
<description>Windows Shell</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>


З.Ы: Прошу прощения, я что-то напутал... хм... щас пойду вспоминать как я это делал...

З.З.Ы: http://www.codenet.ru/progr/delphi/stat/dxp.php
Отредактировано: 12.02.08 19:14
#4
12.02.08 23:35
0
Хммм... Как нормально править Manifest файл в С++, я не могу, у меня после компиляции ошибка какая то...
Отредактировано: 13.02.08 12:01
#5
13.02.08 17:29
0
EvilDev - ошибку показать не судьба? :)

Said прав. Манифест Windows XP - обычный XML файл.
#6
Porshen
14.02.08 01:20
0
Открываешь екзешник который нужно сделать в манифест и жмёшь path
#7
14.02.08 14:53
0
>> EvilDev - ошибку показать не судьба?
Да нэт отрубили, не успел править
>> Открываешь екзешник который нужно сделать в манифест и жмёшь path
После path он вообще запускаться не очет :) Когда удаляю его, все нормально
Вот содержимое моего XML
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
</assembly>

Когда попробовал сделать как говорил Said он просто выдавал ошибку, попробовал еще раз и теперь он просто не запускается, даже никаких сообщений об ошибке нет
#8
Хранитель Флейма
14.02.08 15:08
0
EvilDev
Скорее всего манифесты XP и Vista различаюца. Нужно искать подходящий.

Еще одна вещь - кажеца ResHacker умеет открывать и править манифесты в приложении забитые как ресурсы. Как вариант найти нужный манифест, и заменить им текущий.
#9
29.02.08 20:45
0
Решил не засорять форум кучей тем, по этому и написал здеся...
В общем на С++ в файле .rc создал диалог(как основное окно), прописал WinClassEx, все зарегистрировал, создал окно... Так вот... В первом проекте, все работало, а вот в остальных, этот самопальный диалог не реагирует ни на что, совершенно не на что, даже на кнопку X...
ZeroMemory(&WinClassEx, sizeof(WNDCLASSEX));
WinClassEx.cbSize= sizeof(WNDCLASSEX);
WinClassEx.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
WinClassEx.lpfnWndProc= waMessageProcessor;
WinClassEx.cbClsExtra= 0;
WinClassEx.cbWndExtra= DLGWINDOWEXTRA;
WinClassEx.hInstance = hInstance;
WinClassEx.hIcon = NULL;
WinClassEx.hCursor = LoadCursor(NULL, IDC_ARROW);
WinClassEx.hbrBackground= GetSysColorBrush(COLOR_BTNFACE);
WinClassEx.lpszMenuName = NULL;
WinClassEx.lpszClassName = WIN_CLASSNAME;
WinClassEx.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&WinClassEx)
.. Без создания какого либо окна, при манифесте приложение не создается, а просто тупо закрывается ...
hMainWindow = CreateWindow(...)
ShowWindow(hMainWindow, SW_SHOWDEFAULT);
ShowWindow(hMainWindow, FALSE);
.. Здесь создаем самопальный диалог ...
hMainDialog = CreateDialog(WinClassEx.hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, NULL);
ShowWindow(hMainDialog, SW_SHOWDEFAULT);
UpdateWindow(hMainDialog);
#10
29.02.08 22:07
0
Приведи код WinProc()
#11
29.02.08 22:53
0
Код
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {

    case WM_CLOSE:
            return 0;

    case WM_QUIT:
            return 0;

    case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

    case WM_COMMAND:
            switch(LOWORD(wParam))
            {
            case IDC_BUTTON3:            // -- Exit --
                PostQuitMessage(0);
                return 0;
            }
        }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
#12
Швец, жнец, на дуде игрец
01.03.08 00:36
0
Цитата(EvilDev @ 29.02.2008 - 17:53) [snapback]76759[/snapback]

Код

    return DefWindowProc(hWnd, msg, wParam, lParam);


Если не ошибаюсь, то проблема в этом.
Надо так:
Код

DefWindowProc(hWnd, msg, wParam, lParam);
return 0;
#13
01.03.08 03:00
0
Цитата
Если не ошибаюсь, то проблема в этом.

Не :(

Цитата
Если не ошибаюсь, то проблема в этом.

Не :(
#14
01.03.08 11:49
0
Цитата(EvilDev @ 29.02.2008 - 20:53) [snapback]76759[/snapback]

case WM_QUIT:
return 0;

Это сообщение никогда не попадает в WndProc, оно должно обрабатываться после GetMessage.

Но ошибку я просмотрел, она в следующем
Код
HWND CreateDialog(          HINSTANCE hInstance,
    LPCTSTR lpTemplate,
    HWND hWndParent,
    DLGPROC lpDialogFunc
);

А у тебя последний параметр hMainDialog = CreateDialog(WinClassEx.hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, NULL); NULL - то есть функция обработки сообщений диалога не определена.
Прототип:
Код
INT_PTR CALLBACK DialogProc(          HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
Отредактировано: 01.03.08 11:53
#15
01.03.08 15:06
0
Цитата
Это сообщение никогда не попадает в WndProc, оно должно обрабатываться после GetMessage.

Но ошибку я просмотрел, она в следующем
КодHWND CreateDialog( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
А у тебя последний параметр hMainDialog = CreateDialog(WinClassEx.hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, NULL); NULL - то есть функция обработки сообщений диалога не определена.
Прототип:
КодINT_PTR CALLBACK DialogProc( HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);

Пасиб, все работает, тока смотрится как то коряво, кнопку X как бы видно, но ее как бы не сущ... ^_^
Отредактировано: 01.03.08 20:27
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}