我有一个MDI的程序,想把子框架的关闭按钮去掉,但是保留最大化,最小化按钮,如何可以实现,另外我还想在子框架上添加菜单:SetMenu()函数为什么不能实现这个功能,请帮忙,最好源码:[email protected]

解决方案 »

  1.   

    EnableMenuItem (GetSystemMenu(hwnd, FALSE), SC_CLOSE,MF_BYCOMMAND | MF_GRAYED);
      

  2.   

    根据MSDN,子框架好像是不可以拥有菜单的,要有的话,得走“歪门邪道”了,不过我还是不知道,希望知道的不吝赐教 !
      

  3.   

    可以查阅sql数据库的管理平台,可以看到在子框架上是有菜单的,而且关闭按钮是灰色的,所以一定是可以做到的
      

  4.   

    在CMainFrame创建时,它是默认样式,可以改变它的窗口风格。
    可以看看《深入X出MFC》
      

  5.   

    to: zswzwy(←圣骑士!帕迪拉斯!) 《深入X出MFC》是什么书?
      

  6.   

    //*******************************************************************// 工程:easywin// 文件:easywin.cpp// 内容:一个基本的Win32程序//*******************************************************************#include <windows.h>#include <windowsx.h>//函数声明BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );//*******************************************************************//函数:WinMain()//功能:Win32应用程序入口函数。创建主窗口,处理消息循环//*******************************************************************int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄HINSTANCE hPrevInstance, //前一个实例句柄LPSTR lpCmdLine, //命令行字符int nCmdShow) //窗口显示方式{MSG msg;//创建主窗口if ( !InitWindow( hInstance, nCmdShow ) )return FALSE; //进入消息循环://从该应用程序的消息队列中检取消息,送到消息处理过程,//当检取到WM_QUIT消息时,退出消息循环。while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}//程序结束return msg.wParam;}//******************************************************************//函数:InitWindow()//功能:创建窗口。//******************************************************************static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow ){HWND hwnd; //窗口句柄WNDCLASS wc; //窗口类结构//填充窗口类结构wc.style = CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE;//这个地方是关键,
    //必需要加上CS_NOCLOSEwc.lpfnWndProc = (WNDPROC)WinProc;wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hInstance = hInstance;wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );wc.hCursor = LoadCursor( NULL, IDC_ARROW );wc.hbrBackground = GetStockObject(WHITE_BRUSH);wc.lpszMenuName = NULL;wc.lpszClassName = "EasyWin";//注册窗口类RegisterClass( &wc ); //创建主窗口hwnd = CreateWindow("EasyWin", //窗口类名称"一个基本的Win32程序", //窗口标题WS_OVERLAPPEDWINDOW, //窗口风格,定义为普通型100, //窗口位置的x坐标100, //窗口位置的y坐标400, //窗口的宽度300, //窗口的高度NULL, //父窗口句柄NULL, //菜单句柄hInstance, //应用程序实例句柄NULL ); //窗口创建数据指针if( !hwnd ) return FALSE;//显示并更新窗口ShowWindow( hwnd, nCmdShow );UpdateWindow( hwnd );return TRUE;}//******************************************************************//函数:WinProc()//功能:处理主窗口消息//******************************************************************LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){switch( message ){case WM_KEYDOWN://击键消息switch( wParam ){case VK_ESCAPE:MessageBox(hWnd,"ESC键按下了!","Keyboard",MB_OK);break;}break;case WM_RBUTTONDOWN://鼠标消息{MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);break;}case WM_PAINT://窗口重画消息{char hello[]="你好,我是EasyWin !";HDC hdc;PAINTSTRUCT ps;hdc=BeginPaint( hWnd,&ps ); //取得设备环境句柄SetTextColor(hdc, RGB(0,0,255)); //设置文字颜色TextOut( hdc, 20, 10, hello, strlen(hello) );//输出文字EndPaint( hWnd, &ps ); //释放资源break;}case WM_DESTROY://退出消息PostQuitMessage( 0 );//调用退出函数break;} //调用缺省消息处理过程return DefWindowProc(hWnd, message, wParam, lParam);}
      

  7.   

    http://expert.csdn.net/Expert/topicview.asp?id=1334674
      

  8.   

    to:flyycyu(fly)  
      在OnNcPaint里自己画!
     菜单可以画出来吗?
     
      

  9.   

    创建对话框时把SystemMenu定义成FALSE最简单.