Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Новые возможности Windows 7


Автор: desivers 14.4.2011, 14:59
Всем привет. Хочу использовать в своей программе новые возможности Windows 7. Но читая в интерене натыкаюсь то на обзорные статьи то на компоненты для C#. Кто то уже использовал?

Автор: Metalex 14.4.2011, 16:52
Цитата(desivers @  14.4.2011,  14:59 Найти цитируемый пост)
новые возможности Windows 7

что именно вы под этим подразумеваете? Новая версия DirectX?

Автор: desivers 14.4.2011, 21:14
Имелось ввиду Progress Bar, ThumbButtons, OverlayIcons, Windows manager, ThumbnailPreview, JumpLists

Вот нашел одну статейку. Помогите перевести с Delphi/

procedure TForm1.FormCreate(Sender: TObject);
 var
 DEnable: DWORD;
 bmp: TBItmap;
begin
 DEnable:= DWMNCRP_ENABLED;
 If S_OK <> 
 DwmSetWindowAttribute(Handle,DWMWA_FORCE_ICONIC_REPRESENTATION,
@DEnable,SizeOf(DEnable));
then MessageBox(0,’Error’,0,0);

If S_OK <> 
 DwmSetWindowAttribute(Handle,DWMWA_HAS_ICONIC_BITMAP,
@DEnable,SizeOf(DEnable));
then MessageBox(0,’Error’,0,0); 

 Bmp:= TBitmap.Create;
 Bmp.LoadFromFile('полный путь к нужной картинке');
If S_OK <> 
 DwmSetIconicThumbnail(Handle,Bmp.Handle,0);
then MessageBox(0,’Error’,0,0);
end;

Автор: borisbn 15.4.2011, 08:48
desivers, ты что, действительно не можешь перевести это с паскаля на Си ?

Автор: desivers 15.4.2011, 12:25
Цитата(borisbn @ 15.4.2011,  08:48)
desivers, ты что, действительно не можешь перевести это с паскаля на Си ?

Перевести одно, а чтоб заработало другое.
Вот помогли мне, но не работает.

Код

DWORD DEnable;
Graphics::TBitmap *bmp;
bmp = new Graphics::TBitmap;
Bmp->LoadFromFile("полный путь к нужной картинке");
DEnable = DWMNCRP_ENABLED; // ?
 
if (S_OK != DwmSetWindowAttribute(Handle,DWMWA_FORCE_ICONIC_REPRESENTATION,
            &DEnable,sizeof(DEnable)) {
  ShowMessage("Ошибка");
}
if (S_OK != DwmSetWindowAttribute(Handle,DWMWA_HAS_ICONIC_BITMAP,
            &DEnable,SizeOf(DEnable));
  ShowMessage("Ошибка");
}
// Bmp:= TBitmap.Create;
if (S_OK != DwmSetIconicThumbnail(Handle,Bmp->Handle,0) {
  ShowMessage("Ошибка");
}

Автор: _Dimon_ 16.4.2011, 09:43
Меня тоже заинтересовала эта тема.
В делфи, кстати, тоже не работает, а именно функция DwmSetIconicThumbnail.

На си это виглядило бы вот так:

Код

BOOL fForceIconic = TRUE;
BOOL fHasIconicBitmap = TRUE;

if (S_OK != DwmSetWindowAttribute(Handle,DWMWA_FORCE_ICONIC_REPRESENTATION,
    &fForceIconic,sizeof(fForceIconic)))  ShowMessage("Ошибка1");

if (S_OK != DwmSetWindowAttribute(Handle,DWMWA_HAS_ICONIC_BITMAP,
    &fHasIconicBitmap,sizeof(fHasIconicBitmap)))  ShowMessage("Ошибка2");


Graphics::TBitmap *bmp;
bmp = new Graphics::TBitmap;
bmp->LoadFromFile("файл");


if (S_OK != DwmSetIconicThumbnail(Handle,bmp->Handle,0))
  ShowMessage("Ошибка3");


Но в MSDN написано следующее:
Код

//To set an iconic bitmap on a window for use as a thumbnail representation, an application calls the DwmSetIconicThumbnail function. To set this bitmap, the application must first call the 
//DwmSetWindowAttribute function to set window attributes for non-client rendering to DWMWA_FORCE_ICONIC_REPRESENTATION and DWMWA_HAS_ICONIC_BITMAP, as shown in the following code. 

            // Set DWM window attributes to provide the iconic bitmap, and 
            // to always render the thumbnail using the iconic bitmap.
            BOOL fForceIconic = TRUE;
            BOOL fHasIconicBitmap = TRUE;

            DwmSetWindowAttribute(
                hwnd,
                DWMWA_FORCE_ICONIC_REPRESENTATION,
                &fForceIconic,
                sizeof(fForceIconic));

            DwmSetWindowAttribute(
                hwnd,
                DWMWA_HAS_ICONIC_BITMAP,
                &fHasIconicBitmap,
                sizeof(fHasIconicBitmap));


//Then, the application calls DwmSetIconicThumbnail to respond to the WM_DWMSENDICONICTHUMBNAIL message, as shown in the following code.

        case WM_DWMSENDICONICTHUMBNAIL:
        {    
            // This window is being asked to provide its iconic bitmap. This indicates
            // a thumbnail is being drawn.
            hbm = CreateDIB(HIWORD(lParam), LOWORD(lParam)); 
            if (hbm)
            {
                hr = DwmSetIconicThumbnail(hwnd, hbm, 0);
                DeleteObject(hbm);
            }
        }
        break;



У меня RAD XE, и ругается на функцию CreateDIB , мол нет такой.................  хз

Автор: desivers 18.4.2011, 22:18
Вот нашел еще пару статеек, надо разобраться на выходных.
http://msdn.microsoft.com/en-us/gg465005
http://msdn.microsoft.com/en-us/gg465010
http://windowsteamblog.com/windows/b/developers/archive/2009/07/28/windows-7-taskbar-dynamic-overlay-icons-and-progress-bars.aspx
http://geekswithblogs.net/Jialiang/archive/2010/11/30/all-in-one-windows-shell-code-samples.aspx

Автор: _Dimon_ 22.4.2011, 11:57
Никто не проверял, работает ли даная функция, а то товарищ desivers заинтересовал меня даной возможностью, а ни х... не работает ((((

Автор: desivers 25.4.2011, 21:09
Вот тут хорошие статьи, вот только щас некогда перевести на С++
http://blog.karelia.ru/teran/?p=61

Автор: _Dimon_ 27.4.2011, 08:58
Еще http://www.drbob42.com/examine/examinC5.htm статья есть, вроде не плохая.
Я тут набросал на основе этой статьи, посмотрите, мож че не так....
И еще не пойму зачем ITaskbarList3, ITaskbarList4 - что тот использовать, что тот разницы не вижу.

А на счет рисуночка (здесь http://forum.vingrad.ru/index.php?showtopic=327085&view=findpost&p=2331187), так обязательно надо 32-битный ставить, а то ниче не получится.

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