重要的技术文章

来源:互联网 发布:性 婚姻 知乎 编辑:程序博客网 时间:2024/06/05 06:59

c调用java

http://blog.csdn.net/normalnotebook/archive/2006/05/19/744927.aspx

 

freetype2

http://blog.csdn.net/vrix/archive/2008/09/03/2874334.aspx

http://blog.csdn.net/fengrx/archive/2009/06/30/4310274.aspx

 

多显卡多显示器扩展桌面(转 csdn ryan_332595319)

 

一台机器
系统windows7
显卡4块
每块显卡两个输出(VGA和DVI)
最多可以同时接入8个显示器
现在机器连接了N(1<= N <=8)台显示器 PS:每台显示器支持的最大分辨率未知
但是系统桌面只在一台显示器上显示(即主显示器)
现在要写个函数实现将桌面扩展到所有已经连接好的显示器上
扩展顺序是按照系统识别的显示器编号依次扩展
每台显示器的分辨率为最佳分辨率(或最大分辨率)
相关代码如下

void ExtrendMonitor()
{
    DWORD          DispNum = 0;
    DISPLAY_DEVICE DisplayDevice;
    DEVMODE        DeviceMode;
   
    ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
    DisplayDevice.cb = sizeof(DisplayDevice);

    while(EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
    {
        ZeroMemory(&DeviceMode, sizeof(DEVMODE));
        DeviceMode.dmSize = sizeof(DEVMODE);
        EnumDisplaySettings((LPCTSTR)DisplayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &DeviceMode);
                  //这里获得的DeviceMode值来自哪里?注册表?那注册表的值又来自哪里?
        ChangeDisplaySettingsEx((LPCTSTR)DisplayDevice.DeviceName, &DeviceMode, NULL, CDS_GLOBAL | CDS_NORESET | CDS_UPDATEREGISTRY, NULL);

        ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
        DisplayDevice.cb = sizeof(DisplayDevice);

        DispNum++;
    }//while循环退出时为什么DispNum == 11?不是应该等于8吗?

    ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
}

 

我的finalskb程序修改

将SoftKeyWinProc函数修改为如下,效果会更好,整个程序中只用一个SoftKeyWinProc函数
int SoftKeyWinProc(void *pobj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  EMPTY_WINDOW_SAVE *pobjSave;
  ClaSoftKey *pWin;
  int iMid;
  HDC hDC;
  PAINTSTRUCT objPS;
  HWND hParent;
  POINT objPoint;
  RECT objWinRect;
  CKeyBoard *pKeyBoard;
  TRACKMOUSEEVENT objTrackEvent;

  pobjSave = (EMPTY_WINDOW_SAVE*)pobj;
  pWin = (ClaSoftKey*)pobjSave->object_pointer;
  if(0 == pWin)
  {
  return -1;
  }
  hParent = ::GetParent(hWnd);

  iMid = -1;
  switch(message)
  {
  case WM_LBUTTONDOWN:
  {
  if(0 == (pWin->m_iFlag & MOUSE_DOWN))
  {
  ::GetCursorPos(&objPoint);
  ::ScreenToClient(hWnd, &objPoint);
  pWin->m_iXMouse = objPoint.x;
  pWin->m_iYMouse = objPoint.y;
  ::SetCapture(hWnd);
  pWin->m_iFlag |= MOUSE_DOWN;
   
  if(0 == (SHIFT_MODULE & pWin->m_iFlag))
  {
  pKeyBoard = (CKeyBoard*)pWin->m_pObject;
  pKeyBoard->KeyOperate(pWin->m_iKeyValue, 2);
  }
  }
  if(pWin->m_iIsEnable)
  {
  pWin->FlushWindow();
  }
  }
  break;
  case WM_LBUTTONUP:
  {
  if(pWin->m_iFlag & MOUSE_DOWN)
  {
  pWin->m_iXMouse = 0;
  pWin->m_iYMouse = 0;
  ::ReleaseCapture();
  pWin->m_iFlag &= (~MOUSE_DOWN);
  pKeyBoard = (CKeyBoard*)pWin->m_pObject;

  if(SHIFT_MODULE & pWin->m_iFlag)
  {
  if(pWin->m_iFlag & SHIFT_DOWN)
  {
  pWin->m_iFlag &= (~SHIFT_DOWN);
  if(pKeyBoard != 0)
  {
  pKeyBoard->KeyOperate(pWin->m_iKeyValue, 1);
  }
  }
  else
  {
  pWin->m_iFlag |= SHIFT_DOWN;
  if(pKeyBoard != 0)
  {
  pKeyBoard->KeyOperate(pWin->m_iKeyValue, 2);
  }
  }
  }
  else
  {
  if(pKeyBoard != 0)
  {
  pKeyBoard->KeyOperate(pWin->m_iKeyValue, 1);
  }
  }
  }
  if(pWin->m_iIsEnable)
  {
  pWin->FlushWindow();
  }
  }
  break;
  case WM_MOUSEMOVE:
  {
  ::GetWindowRect(hWnd, &objWinRect);
  ::GetCursorPos(&objPoint);
  if(pWin->m_iFlag & MOUSE_MOVE)
  {
  ::MoveWindow(hWnd, objPoint.x - pWin->m_iXMouse, objPoint.y - pWin->m_iYMouse, /
  objWinRect.right - objWinRect.left, /
  objWinRect.bottom - objWinRect.top, 1);
  }
  else
  {
  ::ScreenToClient(hWnd, &objPoint);
  if((objPoint.x < 0) || (objPoint.y < 0) /
  || (objPoint.x >= objWinRect.right - objWinRect.left) /
  || (objPoint.y >= objWinRect.bottom - objWinRect.top))
  {
  if(pWin->m_iFlag & MOUSE_MOVEING)
  {
  pWin->m_iFlag &= (~MOUSE_MOVEING);
  pWin->FlushWindow();
  }
  }
  else
  {
  if(0 == (pWin->m_iFlag & MOUSE_MOVEING))
  {
  pWin->m_iFlag |= MOUSE_MOVEING;
  pWin->FlushWindow();
  objTrackEvent.cbSize = sizeof(objTrackEvent);
  objTrackEvent.dwFlags = TME_LEAVE;
  objTrackEvent.hwndTrack = hWnd;
  ::TrackMouseEvent(&objTrackEvent);
  }
  }
  }
  }
  break;
  case WM_MOUSELEAVE:
  {
  if(0 == (pWin->m_iFlag & MOUSE_DOWN))
  {
  pWin->m_iFlag &= (~MOUSE_MOVEING);
  pWin->FlushWindow();
  }
  }
  break;
  case WM_PAINT:
  {
  hDC = BeginPaint(hWnd, &objPS);
  iMid = pWin->OnDraw(hDC);
  EndPaint(hWnd, &objPS);
  }
  break;

  case WM_CLOSE:
  {
  ::DestroyWindow(hWnd);
  }
  break;
  case WM_DESTROY:
  {
  pWin->m_hSelfWin = 0;
  if(CLOSE_EXIT & pWin->m_iFlag)
  {
  ::PostQuitMessage(0);
  }
  pWin->Destroy();
  iMid = 0;
  }
  break;

  case WM_KEYUP:
  {
  if((VK_ESCAPE == (unsigned int)wParam) && (ESC_CLOSE & pWin->m_iFlag))
  {
  ::DestroyWindow(hWnd);
  iMid = 0;
  }
  }
  break;
  };

  return iMid;
}

 

原创粉丝点击