请问:如何使基于Dialog风格的mfc程序的窗口全屏显示.是没有标题栏的那种全屏,不是最大化显示.希望能够有完整的代码.谢谢了.

解决方案 »

  1.   

    用directdraw如下:
    看其中关键部分
    //---------------------------------------------
    //
    //FileName: frame.cpp
    //
    //---------------------------------------------#include <windows.h>
    #include <ddraw.h>
    #include "ddutil.h"LPDIRECTDRAW lpDD;
    LPDIRECTDRAWSURFACE lpDDSPrimary;
    LPDIRECTDRAWSURFACE lpDDSBack;
    LPDIRECTDRAWSURFACE lpDDSMap;
    LPDIRECTDRAWSURFACE lpDDSRole;
    LPDIRECTDRAWPALETTE lpDDPal;char szMsg1[] = "Hello World, I am DirectDraw boy !";
    char szMsg2[] = "°&acute; ESC &Iacute;&Euml;&sup3;&ouml;";
    char szBitmap[] = "main.bmp";LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );BOOL InitWindow( HINSTANCE, int);
    BOOL InitDDraw();
    void FreeDDraw();

    int WINAPI WinMain( HINSTANCE hInstance,
                 HINSTANCE hPrevInst,
     LPSTR lpszCmdShow,
     int nCmdShow )
    {
    MSG Msg;
        
    if(!InitWindow( hInstance, nCmdShow))
       return FALSE;
    if(!InitDDraw()) return FALSE;
        while( GetMessage( &Msg, NULL, 0, 0))
    {
    TranslateMessage( &Msg);
    DispatchMessage( &Msg);
    }
        return TRUE;
    }BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
    {
        HWND hWnd;
    WNDCLASS wndclass;
    char lpszClassName[] = "&acute;°&iquest;&Uacute;";
    char lpszTitle[] = "My-Windows"; wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION );
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW );
    wndclass.hbrBackground = ( HBRUSH)GetStockObject( BLACK_BRUSH);
        wndclass.lpszClassName = lpszClassName;
    wndclass.lpszMenuName = NULL; if( !RegisterClass( &wndclass))
    {
    MessageBeep(0);
    return FALSE;
    }
    hWnd = CreateWindow( lpszClassName,
                     lpszTitle,
     WS_POPUP,
     CW_USEDEFAULT,
     CW_USEDEFAULT,
     CW_USEDEFAULT,
     CW_USEDEFAULT,
     NULL,
     NULL,
     hInstance,
     NULL); ShowWindow( hWnd, nCmdShow);
    UpdateWindow( hWnd);
    return TRUE;
    }BOOL InitDDraw()
    {
    DDSURFACEDESC ddsd;
    DDSCAPS       ddscaps;
    if ( DirectDrawCreate( NULL, &lpDD, NULL) != DD_OK) return FALSE;    if ( lpDD->SetCooperativeLevel( GetActiveWindow(),
    DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) != DD_OK) return FALSE;
    if ( lpDD->SetDisplayMode( 640, 480, 8 ) != DD_OK) return FALSE;   
    ddsd.dwSize = sizeof( ddsd );
        ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
    ddsd.dwBackBufferCount = 1;    lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
        ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
        lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack) ; lpDDPal = DDLoadPalette(lpDD, szBitmap);
        if (lpDDPal) lpDDSPrimary->SetPalette( lpDDPal );
      
    //&sup2;&Ugrave;×÷
    lpDDSMap = DDLoadBitmap( lpDD, "main.bmp",0,0);
    lpDDSRole = DDLoadBitmap( lpDD, "Role.bmp",0,0);
        DDSetColorKey( lpDDSRole, RGB(255,0,255));
    return TRUE;
    }void FreeDDraw()
    {
    if(lpDD!=NULL)
    {
    if(lpDDSPrimary!=NULL)
    {
    lpDDSPrimary->Release();
    lpDDSPrimary = NULL;
    lpDDSMap->Release();
    lpDDSPrimary = NULL;
    lpDDSRole->Release();
    lpDDSRole = NULL;
    lpDDPal->Release();
    lpDDPal = NULL;
    }
    lpDD->Release();
    lpDD = NULL;
    }
    }
      
    LRESULT CALLBACK WndProc( HWND hWnd,
      UINT message,
      WPARAM wParam,
      LPARAM lParam)
    {   
        RECT rcRECT,rlRECT;int x,y;
     rlRECT.top = 0;rlRECT.left = 0; rlRECT.bottom = 120;
    rlRECT.right = 120;rcRECT.left=0;rcRECT.right = 640;
    rcRECT.bottom = 480;rcRECT.top = 0;
    switch(message)
    {
    case WM_MOUSEMOVE:
            x = LOWORD(lParam);
    y = HIWORD(lParam);
    lpDDSBack->BltFast( 0, 0, lpDDSMap, &rcRECT, FALSE);
    lpDDSBack->BltFast( x-60, y-60, lpDDSRole, &rlRECT, DDBLTFAST_SRCCOLORKEY);
    lpDDSPrimary->Flip(NULL,0);
    break;
    case WM_KEYDOWN:
    switch(wParam)
    {
    case VK_ESCAPE:
    PostMessage( GetActiveWindow(),WM_DESTROY,0,0);
    break;
    }
    break;
    case WM_DESTROY:
    FreeDDraw();
    PostQuitMessage(0);
        default:
        return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return(0);
    }
      

  2.   

    void CCqqDlg::OnFullScreen() 
    {
        // 最大化
        SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
        //隐藏标题栏
        ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME);
    }
    代码有待完善,但希望对你有帮助。
      

  3.   

    想到解决办法了,我可以告诉你,全屏幕显示完整意义上的FULLSCREEN是绝对不可能的
    但是可以模拟,解决方法是
    把dialog,假设自己创建的对话框类为CFULLDlg
    右键属性在Style栏里把TitleBar勾去,不选
    然后在合适位置添加:
    CWnd *dlgWnd = CFULLDlg::GetActiveWindow();
    dlgWnd->MoveWindow(0,0,800,600,true);//我的分辨率是800*600
    我试过,在对话框初始话的函数里添加不可以
    你可以设置一个按钮,点击时调用上面函数
      

  4.   

    首先你要把对话框的属性当中,对话框中设置NONE 不在是DIALOG FRAME
    就没有边框了,然后没有象上面那么复杂了。把你的信箱给我我给你把代码发过去
    就几行,别忘记给分呀
      

  5.   

    void CCqqDlg::OnFullScreen() 
    {
        // 最大化
        SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
        //隐藏标题栏
        ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME);
    }
      

  6.   

    OnFull()
    {
      ......
       GetWindowRect(&m_rcMain);//restore the src screen's size;
     //delete the showing window's caption
    LONG style = GetWindowLong(m_hWnd,GWL_STYLE);
    style &=~WS_CAPTION;
    //set the window's show sytle
    SetWindowLong(m_hWnd,GWL_STYLE,style);
    //get the screen's pixel
    int screenX = GetSystemMetrics(SM_CXSCREEN);
    int screenY = GetSystemMetrics(SM_CYSCREEN);
    //show window
    SetWindowPos(NULL,0,0,screenX,screenY,SWP_NOZORDER);
    }
        屏幕恢复的代码:
             OnReset()
    {
       ......
        m_rcChange = m_rcMain;
    //get the window style and add its caption
    LONG style = GetWindowLong(m_hWnd,GWL_STYLE);
    style |=WS_CAPTION;
    //set the showing window style
    SetWindowLong(m_hWnd,GWL_STYLE,style);
    //show window
    SetWindowPos(NULL,m_rcChange.left,m_rcChange.top,m_rcChange.right -  m_rcChange.left,m_rcChange.bottom-m_rcChange.top,SWP_NOZORDER);
    }