понедельник, 30 марта 2009 г.

Tips & tricks WinForms .NET 2

Перемещение окна за любое место

  1. const int WM_NCHITTEST = 0x84;   
  2. const int HTCAPTION = 2;   
  3. const int HTCLIENT = 1;   
  4.    
  5. protected override void WndProc(ref Message m)   
  6. {   
  7.        base.WndProc(ref m);   
  8.    
  9.        if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)   
  10.            m.Result = (IntPtr)HTCAPTION;   
  11. }  

вторник, 10 марта 2009 г.

Shell COM для Window x64

Много программ хорошо работает как под x32 так и под x64 виндами. Но есть то что не будет работать - это расширения для Shell x64 винды, написаные для x32 ( можно зарегать под x32 проводник, но этот путь не для настоящих джедаев ).

Создать расширение для оболочки Windows x64, оказывается на поверку тривиальной задачей.

Для начала понадобится компилятор x64 - в VS2008 уже включен.

Compiling 64 bit DLL/EXE

1. Open your Visual C++ Solution
2. Choose Build->Configuration Manager menu
3. Inside the Configuration Manager window, change the ‘Active solution platform’ to x64. If you don’t have any, you would need to create one by selecting the ‘New..’ drop down item. Copy settings from your Win32 platform.
4. Now rebuild your solution.

Если возникли ошибки связаные с типами, меняем : INT_PTR <- int. DWORD_PTR <- DWORD.
Специфичный код обрамляем в соотвествующие макросы _WIN64 и _WIN32.

Регистрация осуществляется с помощью : C:\Windows\System32\regsvr32.exe (64 bit)
Для висты требуются админские права.