Патриотическое кино - Тарас Бульба

В целом фильм вызывает смешаные чувства, куча роялей и контрастов. Собрали кучу маленьких фильмецов и вот вам чудо кино. Местами интересно, местами хочется выйти из зала. Книжку я читал, и сочинение по ней писал в школе в каких лохматых годах того столетий. Но Черт возьми, книга явно имеет другой окрас и другую интонацию чем фильм ! Кровавые сцены порой вызывают тошные чувства, а сцена казни...


Небольшая рецензия.

http://www.filmz.ru/pub/7/16435_1.htm

Tips & tricks WinForms .NET 2

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

const int WM_NCHITTEST = 0x84;
const int HTCAPTION = 2;
const int HTCLIENT = 1;

protected override void WndProc(ref Message m)
{
       base.WndProc(ref m);

       if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)
           m.Result = (IntPtr)HTCAPTION;
}Syhi-подсветка кода

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)
Для висты требуются админские права.

Восстановление устройства в DirectX

Немного кода...

HRESULT hr = m_pD3DDevice->TestCooperativeLevel ();

// c девайсом пока ничего не случилось
if ( false == m_bDeviceLost )
{
        if ( hr == D3DERR_DEVICELOST )
        {       // произошли проблемы
                m_bDeviceLost = true;

                OnLostDevice();  
        }
}

// если девайс не сбросили надо его сбросить
if ( hr == D3DERR_DEVICENOTRESET )     
{
        hr = m_pD3DDevice->Reset ( &m_d3dpp )

        if ( hr == D3D_OK )
        {
                OnResetDevice();       

                // девайс в порядке
                m_bDeviceLost = false;
        }
        else
                if ( hr == D3DERR_DEVICELOST )
                {
                        // произошли проблемы
                        m_bDeviceLost = true;   

                        OnLostDevice();
                }
}Syhi-подсветка кода


Этот код достаточно вставить перед вызовом BeginScene для девайса.

OnLostDevice - релизим все ресурсы которые с типом D3DPOOL_DEFAULT,
OnResetDevice - аналогично пересоздаем все ресурсы с типом D3DPOOL_DEFAULT, для всех ID3DX интерфейсов вызываем соответствующие методы.

Если у вас происходит ресайз окна достаточно вызвать последовательность методов
OnLostDevice, затем Reset девайсу, OnResetDevice.

Mожно вставить проверки на возвращаемые значения для BeginScene (), EndScene (), Present ().

"Open source" от microsoft

В последнее время озаботился тулзами и всякими либами для .NET (бесплатные и желательно с открытыми сорцами). Вот те на http://www.codeplex.com/ - чудо сайт "CodePlex is Microsoft's open source project hosting web site. Start a new project, join an existing one, or download software created by the community." - описание с сайта подняло настроение.

http://www.codeplex.com/ScintillaNET ( контрольчик для подсветки синтаксиса, для тех кто из тундры или с другой планеты ) - эта тулза так вапще находка для токаря. Ковыряние с исходниками и написание своего маленького теста (посветка кода lua, xml), мое настроение улетело в горы ! Все работает как часики.

Tips & tricks WinForms .NET

"Отзывчивое окно"

У class System.Windows.Forms.Form, есть свойство Opacity, достаточно установить его значение в 99%, и мы получаем отзывычивое окошко если на заднем фоне имеется, какое то окно с активной перерисовкой. Нет тормозов при перемещении окна. Думаю это аппаратный альфебленд, на видеокарте.(такой трюк провернуть через WIN 32 API, не удалось появлялись глюки с выпаданием пикселей).

"WinFormSingleton" NoneSafeThread

Как сделать из Form подобиее синглтона ? смотрим ниже код

#region WindowFromsSingleton

private FormSingleton m_oFormSingleton = null;

private void ShowFormSingleton(object sender, EventArgs e)
{
  if (null == m_oFormSingleton)
  {
    m_oFormSingleton = new FormSingleton();
    m_oFormSingleton.Show();

    m_oFormXmlTrackSettings.Closed += new EventHandler(FormSingleton_Closed);
  }
}
private void FormSingleton_Closed(object sender, EventArgs e)
{
  m_oFormSingleton.Closed -= new EventHandler(FormSingleton_Closed);
  m_oFormSingleton = null;
}

#endregionSyhi-подсветка кода

Дауншифтинг

Ежедневный парс электронный новостей приводит к тому что обрастаешь небольшим сленгом. Непереводимые слова, транслит и прочее... на этом фоне весьма любопытным для меня оказалось слово "Дауншифтинг".

Дауншифтинг (англ. downshifting, замедление или ослабление какого-то процесса) —сленговый термин, обозначающий жизненную философию «жизни ради себя», «отказа от чужих целей» (также применяется синоним Simple living).
В классическом понимании дауншифтинг — это всегда выбор между доходами и стрессами и душевным комфортом за меньшее вознаграждение. Обычно, уходя из бизнеса или со стрессовой работы, люди преследуют такие цели, как получение большего количества времени на увлечения или на семью. (содрано с вики).

Все желающие могут поподробнее изучить это по двум линкам -
http://ru.wikipedia.org/wiki/%D0%94%D0%B0%D1%83%D0%BD%D1%88%D0%B8%D1%84%D1%82%D0%B8%D0%BD%D0%B3
http://community.livejournal.com/ru_downshift

Установка имени потока в msvc.

При отладке в Microsoft Visual Studio 2005/2008 (с++), потокам в режиме debug-breakpoints можно задать имена. Поиск по мсдн ничего толком не дал. По остальным источникам, оказалось что есть вот такая функция, даже работает. (проверено )) Вот исходный код, пользуемся.

/* Установка имени для потока в отладчике */
void SetThreadName ( DWORD nThreadID, const char* pThreadName )
{
 struct
 {
  DWORD dwType; // Должно быть 0x1000
  LPCSTR szName; // Указатель на строку с именем
  DWORD dwThreadID; // Идентификатор потока ( -1 для текущего )
  DWORD dwFlags; // Зарезервировано ( должно быть 0 )
 }

 info = { 0x1000, pThreadName, nThreadID, 0 };

 __try
 {
  // 0x406D1388 - магическое число, которое сообщает отладчику имя потока
  RaiseException ( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
 }
 __except ( EXCEPTION_CONTINUE_EXECUTION )
 {

 }
}Syhi-подсветка кода