如何全屏显示(求代码) 请问:如何使基于Dialog风格的mfc程序的窗口全屏显示.是没有标题栏的那种全屏,不是最大化显示.希望能够有完整的代码.谢谢了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用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[] = "°´ ESC Í˳ö";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[] = "´°¿Ú"; 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 ); //²Ù×÷ 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);} void CCqqDlg::OnFullScreen() { // 最大化 SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL); //隐藏标题栏 ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME); }代码有待完善,但希望对你有帮助。 想到解决办法了,我可以告诉你,全屏幕显示完整意义上的FULLSCREEN是绝对不可能的但是可以模拟,解决方法是把dialog,假设自己创建的对话框类为CFULLDlg右键属性在Style栏里把TitleBar勾去,不选然后在合适位置添加: CWnd *dlgWnd = CFULLDlg::GetActiveWindow(); dlgWnd->MoveWindow(0,0,800,600,true);//我的分辨率是800*600我试过,在对话框初始话的函数里添加不可以你可以设置一个按钮,点击时调用上面函数 首先你要把对话框的属性当中,对话框中设置NONE 不在是DIALOG FRAME就没有边框了,然后没有象上面那么复杂了。把你的信箱给我我给你把代码发过去就几行,别忘记给分呀 void CCqqDlg::OnFullScreen() { // 最大化 SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL); //隐藏标题栏 ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME); } 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);} vc workspace MFC控件出问题 请教windows核心编程WaitForMultipleObjects 如何响应listbox的右键消息 如何把两首mp3合并成一首? 如何删除一个已经生成的派生类? 如何把屏幕上某矩形区域内的象素截出来保存在数组中? 请教:如何指定float数据的精度 如何用Socket接收来自GPRS(TCP/IP协议)的数据? 急!!!在InstallShield中如何执行sql语句建一个数据库? 要怎样才可以动态的显示窗口?大家帮下忙 谁有切分窗口的例子 ADO 怎么就是连接不上数据库呢 ,在线等
看其中关键部分
//---------------------------------------------
//
//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[] = "°´ ESC Í˳ö";
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[] = "´°¿Ú";
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 );
//²Ù×÷
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);
}
{
// 最大化
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
//隐藏标题栏
ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME);
}
代码有待完善,但希望对你有帮助。
但是可以模拟,解决方法是
把dialog,假设自己创建的对话框类为CFULLDlg
右键属性在Style栏里把TitleBar勾去,不选
然后在合适位置添加:
CWnd *dlgWnd = CFULLDlg::GetActiveWindow();
dlgWnd->MoveWindow(0,0,800,600,true);//我的分辨率是800*600
我试过,在对话框初始话的函数里添加不可以
你可以设置一个按钮,点击时调用上面函数
就没有边框了,然后没有象上面那么复杂了。把你的信箱给我我给你把代码发过去
就几行,别忘记给分呀
{
// 最大化
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
//隐藏标题栏
ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME);
}
{
......
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);
}