Gérer un programme devant tourner sur 1 PC avec 2 écrans ???

Résolu
cs_nascimo Messages postés 5 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 16 juin 2008 - 12 juin 2008 à 11:25
cs_nascimo Messages postés 5 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 16 juin 2008 - 16 juin 2008 à 14:18
Bonjour, je dois programmer une appli sur 2 écrans (une fenêtre pour chaque écran). Ces 21 écrans étant bien sur reliè au même PC.
Je suis sous borland et je n'ai rien trouvé sur l'aide, idem sur les forums ...
A part la variable 'screen' qui permet tout juste de connaitre la résolution ...

Je voulais savoir si mon idée était possible et si oui, comment ? (composant borland, événement window à intercepter ...)

Merci d'avance pour vos réponses

4 réponses

f_l_a_s_h_b_a_c_k Messages postés 56 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 1 février 2009
14 juin 2008 à 12:45
Salut moi aussi j ai 2 ecran et j ai programer ca si tu veux l essayer

j ai fait une pettie fonction que s appelle dual

// 2_ecran.cpp : Defines the entry point for the application.
//

#include <windows.h>

#define COMPILE_MULTIMON_STUBS

 
#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                    // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name

// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

 

 HWND Main;
 HWND View;
 int chk=0;
 
     int x=0,y=0,xx=0,yy=0;
 int dx=0,dy=0,dxx=0,dyy=0;

#define    say(h,s)    MessageBox(h,s,"Dual",MB_OK | MB_ICONINFORMATION    );

int Dual(int &lx, int &ly, int &lxx,int &lyy,  int &ldx,int &ldy, int &ldxx,int  &ldyy)
{ int value=1; //set 1 ecran

    //ecran 1
    lx=0;
    ly=0;
    lxx = GetSystemMetrics(SM_CXSCREEN);
    lyy = GetSystemMetrics(SM_CYSCREEN);
    ////////////////////

    //ecran 2
    ldx=lxx+1;
    ldy=0;
    ldxx=(GetSystemMetrics(SM_CXVIRTUALSCREEN)-lxx);
    ldyy=GetSystemMetrics(SM_CYVIRTUALSCREEN);
    if(ldxx+lxx>ldx) value=2; //set 2 ecran
   
    //////////////////////

    return value;
}

int APIENTRY  WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
     // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

   

   

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_ECRAN, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_ECRAN);

    chk=Dual(x, y, xx, yy,   dx,dy, dxx,dyy);
     
/////test
    if(chk>1) {
              SetWindowPos(Main,HWND_TOPMOST,x,y,xx,yy,SWP_SHOWWINDOW);
              say(Main,"Ecran 1");

              SetWindowPos(Main,HWND_TOPMOST,dx, dy, dxx, dyy,SWP_SHOWWINDOW);
              say(Main,"ecran 2");
         
 
              SetWindowPos(Main,HWND_TOPMOST,x,  y, dxx+xx, dyy,SWP_SHOWWINDOW);
              say(Main,"ecran 1 & 2");
    }
     else { //1 ecran gros
        SetWindowPos(Main,HWND_TOPMOST,x,  y, dxx+xx, dyy,SWP_SHOWWINDOW);

      }
     
////////////////////////////////////////////////////////////

    

    // Pict(0,0,800,600);
    //Pict(dx, dy, dxx, dyy);

   

 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
 

   

//    PostMessage(View,WM_CLOSE,0,0);
    //PostMessage(View,WM_QUIT,0,0);

    return (int) msg.wParam;
}

//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(hInstance, (LPCTSTR)IDI_ECRAN);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wcex.lpszMenuName    = (LPCTSTR)IDC_ECRAN;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle,WS_POPUP,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd) return FALSE;

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   Main=(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND    - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY    - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {

     case WM_INITDIALOG:
     case WM_CREATE:
       
 
        return TRUE;

    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);

        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
           
           
           
            break;

        case IDM_EXIT:
           
            //CPfree(View);
           
            break;
       
                }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    //case WM_DESTROY:
         //DestroyWindow(hWnd);
        // PostQuitMessage(0);
        //break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Message handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
   
        return TRUE;

    case WM_COMMAND:        if (LOWORD(wParam) IDOK || LOWORD(wParam) IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return TRUE;
        }
        break;
    }
    return FALSE;
}
3
cs_nascimo Messages postés 5 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 16 juin 2008
12 juin 2008 à 11:27
"Ces 21 écrans étant bien sur reliè au même PC." -> erreur bien sur, il s'agit bien de 2 écrans ... sa me pose déjà assez d'ennui comme sa ;)
0
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
13 juin 2008 à 16:44
salut,

je te propose de regarder le framework Qt...vu que tu utilises borland, un petit plugin (dll) en qt (c++ multi-plateforme) te permettra de savoir combien tu as d'écrans (sa tu t'en fou) et surtout la résolution pour un écran donné : http://doc.trolltech.com/4.4/qdesktopwidget.html

certes, il te faudra utiliser un autre framework et donc te former un peu dessus, mais bon...avec ça, tu pourras placer n'importe quelle fenetre sur n'importe quel bureau.
0
cs_nascimo Messages postés 5 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 16 juin 2008
16 juin 2008 à 14:18
Merci pour vos réponses ...
Je reçois le second écran bientôt, je testerais aussitôt ...
0
Rejoignez-nous