VC常用技术新编

以下技术,只提供函数名和简单应用事例。详细内容参看 MSDN ,事例中的代码如无特别说明版权归 microsoft 所有

1:判断窗口最小化最大化状态
       最小化到任务栏使用IsIconic()函数判断
       最大化通过IsZoomed()函数判断
       GetWindowPlacement(),调用此函数可以获取窗口的正常状态,最大化,最小化。通过WINDOWPLACEMENT结构体进行判断。

2:一个应用程序只有一个实例
       1:使用FindWindow函数,如果发现指定创建已经存在,就退出
              FindWindow第一个参数为查找窗口的类名。
              FindWindow第二个参数为查找窗口的标题名(最好选择这个)
       2:使用Mutex互斥体
       // Create mutex, because there cannot be 2 instances for same application
     HANDLE hMutex = CreateMutex(NULL, FALSE, "ugg");
     // Check if mutex is created succesfully
     switch(GetLastError())
     {
     case ERROR_SUCCESS:
         // Mutex created successfully. There is no instance running
         break;
    case ERROR_ALREADY_EXISTS:
         // Mutex already exists so there is a running instance of our app.
         return FALSE;
     default:
         // Failed to create mutex by unknown reason
         return FALSE;
     }

3:改变窗口或者控件大小和移动窗口或者控件位置

    1MoveWindow函数,改变窗口的大小和位置

CRect rc;
GetClientRect(&rc);
m_Button.MoveWindow(0, 0, rc.Width(), rc.Height());

2SetWindowPos函数,可以应用Z轴方向上,改变重叠控件的显示次序。
            void CWinApp::HideApplication()
{
   //m_pMainWnd is the main application window, a member of CWinApp
   ASSERT_VALID(m_pMainWnd);
   // hide the application's windows before closing all the documents
   m_pMainWnd->ShowWindow(SW_HIDE);
   m_pMainWnd->ShowOwnedPopups(FALSE);  
   // put the window at the bottom of z-order, so it isn't activated
   m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
      SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
}

4:改变窗口的最大化最小化正常状态

      1SetWindowPlacement函数
    设置窗口最大化最小化显示状态,通过WINDOWPLACEMENT结构体进行设置
       2POSTSend这三种SC_MAXIMIZESC_MINIMIZESC_RESTORE命令消息
      
PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE,0);// 最大化
       PostMessage(WM_SYSCOMMAND, SC_ MINIMIZE,0);// 最小化
      
PostMessage(WM_SYSCOMMAND, SC_RESTORE,0);// 正常

5:更改窗口或者控件的注册类名

在默认的情况下,MFC的窗口或者控件的注册类名是MFC自动生成,比如Dialog的注册类名为”#32770”,CButton的注册类名为”Button”等,在一些hook应用中,我们可能需要修改这些注册类名。可以采用如下方法
重载窗口或者控件的PreCreateWindows函数,在函数内做如下修改

       BOOL CMyDilaolg::PreCreateWindow(CREATESTRUCT& cs)

{
WNDCLASS wndcls;
       ZeroMemory( &wndcls, sizeof(WNDCLASS) );  
       wndcls.style = CS_DBLCLKS;
       wndcls.lpfnWndProc = AfxWndProc;
       wndcls.hInstance = AfxGetInstanceHandle();
       wndcls.hIcon = AfxGetApp()->LoadIcon( IDI_APPLICATION );
       wndcls.hCursor = AfxGetApp()->LoadStandardCursor( IDC_ARROW );
       wndcls.hbrBackground = NULL;
       wndcls.lpszMenuName = NULL;
       wndcls.lpszClassName = _T("uggDialog");
     
       AfxRegisterClass( &wndcls );
     
       cs.lpszClass = wndcls.lpszClassName; //
设置控件的注册类名
       return CDialog::PreCreateWindow( cs );
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值