Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Проблемма с GetPixel


Автор: Agentx86 23.3.2009, 21:11
Помогите написать программу которая получает цвета пикселей из другого окна и выводит это в моем окне. Я пытаюсь получить hwnd калькулятора. Получаю его нормально. А вот дальше никик. Подскажите в чем у меня проблема? 
Код

        case WM_LBUTTONDOWN:
                {
                
  HWND hwndprog=FindWindow("SciCalc",0);
  HDC dc;
  dc=GetDC(hwndprog);
  hdc = GetDC(hWnd);
  for(int i=0;i<100;i++)
  {
      for(int j=0;j<100;j++)
      {
          COLORREF color=GetPixel(dc,i,j);
          int r = GetRValue(color);
          int g = GetGValue(color);
          int b = GetBValue(color);
          SetPixel(hdc,i,j,color);

      }
  }
        ReleaseDC(hWnd,hdc);
        ReleaseDC(hwndprog,dc);


                }
                break;

И еще интерессно как можно получить цвет пикселя под мышкой не учитывая над каким окном она находится?

Автор: GP1000 24.3.2009, 17:08
Делаешь почти все правильно но
1) рисовать нужно в обработчике сообщения WM_PAINT
2)окно с которого ты получаешь dc должно быть видно на экране,иначе полученный dc будет черным 
прямоугольником. 
можно попробовать приблизительно вот так 
Код

switch (msg)
    {
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc    = BeginPaint(hWnd, &ps);
                HWND hwndprog=FindWindow(_T("SciCalc"),0);
                HDC dc;
                dc=GetDC(hwndprog);
    
                for(int i=0;i<100;i++)
                {
                    for(int j=0;j<100;j++)
                    {
                        COLORREF color=GetPixel(dc,i,j);
                        int r = GetRValue(color);
                        int g = GetGValue(color);
                        int b = GetBValue(color);
                        SetPixel(hdc,i,j,color);
                    }
                }
                ReleaseDC(hwndprog,dc);
                EndPaint(hWnd, &ps);

...........................................................................................................

при перерисовке твоего окна будет виден кусок 100х100 калькулятора ,если последний находится на экране . 

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