MFC 的一些操作技巧

1. 更改单文档的左上角的“无标题”,并使程序执行后在指定位置显示,并且显示指定大小。

 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  {
 if( !CFrameWnd::PreCreateWindow(cs) )
  return FALSE;
 // TODO: Modify the Window  class or styles here by modifying
 //  the CREATESTRUCT cs

 //改变左上角的“无标题”
 cs.style &= ~FWS_ADDTOTITLE;
 cs.lpszName = "IE";

 cs.cx = 500;  //窗口的宽度
 cs.cy = 350;  //窗口的高度
 cs.x = 0;     //窗口的左上角的x座标
 cs.y = 0;     //窗口的左上角的y座标
 return TRUE;
}

 


2. 创建非模态对话框

  CSendFileDlg *dlg1 = new CSendFileDlg;
  dlg1->Create(IDD_SENG_FILE_DIALOG);
  m_ListView.InsertColumn(0,"IP地址",LVCFMT_CENTER,90);
 m_ListView.InsertColumn(1,"状态",LVCFMT_CENTER,70);
 m_ListView.SetExtendedStyle(LVS_EX_GRIDLINES);dlg1->CenterWindow();  //使非模态对话框居中
  dlg1->ShowWindow(SW_SHOW);

 


3. 模拟响应点击最小化按钮的消息

SendMessage(WM_SYSCOMMAND,SC_MINIMIZE);

LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 switch(message)
 {

 case WM_SYSCOMMAND:
  //如果是系统消息
  if(wParam==SC_MINIMIZE)
  {
   //接收到最小化消息时主窗口隐藏
   AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
   return 0;
  }
  break;
 }

 return CFrameWnd::WindowProc(message, wParam, lParam);
}

 


4. 模拟鼠标在编辑框中按下和写信息操作

SetCursorPos(261,165);  //编辑框的位置
 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

 keybd_event('S', 0, 0, 0);
 keybd_event('s', 0, KEYEVENTF_KEYUP, 0);

 keybd_event('Y', 0, 0, 0);
 keybd_event('y', 0, KEYEVENTF_KEYUP, 0);

 keybd_event('I', 0, 0, 0);
 keybd_event('i', 0, KEYEVENTF_KEYUP, 0);

 keybd_event('T', 0, 0, 0);
 keybd_event('t', 0, KEYEVENTF_KEYUP, 0);

 keybd_event(VK_TAB,0,0,0);
 keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);

 keybd_event('S', 0, 0, 0);
 keybd_event('s', 0, KEYEVENTF_KEYUP, 0);

 keybd_event('Y', 0, 0, 0);
 keybd_event('y', 0, KEYEVENTF_KEYUP, 0);

 keybd_event('I', 0, 0, 0);
 keybd_event('i', 0, KEYEVENTF_KEYUP, 0);

 keybd_event('T', 0, 0, 0);
 keybd_event('t', 0, KEYEVENTF_KEYUP, 0);

 keybd_event(VK_TAB,0,0,0);
 keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);

 keybd_event(VK_RETURN,0,0,0);  //回车键
 keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);

 


5. 显示对话框窗口

原窗口已经打开,但是窗口是隐藏的

FindWindow(NULL,"聊天")->ShowWindow(SW_SHOW);


6. 使单文档初始化时最大化

BOOL CMyIEApp::InitInstance()

{

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);  //最大化窗口

}


7. 对话框中获取框架类的指针和视图类的指针

CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;  
 CMyIEView *m_pView = (CMyIEView*)pFrame->GetActiveView(); 

需要在对话框的.h中添加头文件:

#include "MyIEDoc.h"    //注意#include "MyIEDoc.h" 和#include "MyIEView.h"的顺序
#include "MyIEView.h" 


 8. 对CString对象格式化

 CString IP = "192.168.1.1";
 char ObjectIP[100];
 sprintf(ObjectIP,"与%s聊天中:",IP);
 (GetDlgItem(IDC_EDIT_OBJECT))->SetWindowText(ObjectIP); 

 或者

 CString IP = "192.168.1.1";

 CString ObjectIP;
 ObjectIP.Format("与%s聊天中:",IP);

 (GetDlgItem(IDC_EDIT_OBJECT))->SetWindowText(ObjectIP); 


 9. 获取当前时间

 CString strTime;
 CTime CurrentTime=CTime::GetCurrentTime();   
 strTime.Format("(%d:%d:%d)",CurrentTime.GetHour(), 
 CurrentTime.GetMinute(),CurrentTime.GetSecond());


  10. 获取本机的ip

 char name[255];
 CString ip;
 PHOSTENT hostinfo;
 if( gethostname ( name, sizeof(name)) == 0)
 {
  if((hostinfo = gethostbyname(name)) != NULL)
  {
   ip = inet_ntoa ( *(struct in_addr *)*(hostinfo->h_addr_list) );
  }
 }


11. 向List Control控件中加入列名

 m_ListView.InsertColumn(0,"IP地址",LVCFMT_CENTER,90);
 m_ListView.InsertColumn(1,"状态",LVCFMT_CENTER,70);

 m_ListView.SetExtendedStyle(LVS_EX_GRIDLINES);  //栅格状


12. 当单击List Control控件中一项时,(NM_CLICK)消息响应函数

在.cpp中加入

BEGIN_MESSAGE_MAP(CChat, CDialog)
 //{{AFX_MSG_MAP(CChat)
 ON_BN_CLICKED(IDC_BTN_SEND, OnBtnSend)
 //}}AFX_MSG_MAP
  ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
END_MESSAGE_MAP()

在.h中加入

//{{AFX_MSG(CChat)
 afx_msg void OnBtnSend();
 virtual BOOL OnInitDialog();
 //}}AFX_MSG
 afx_msg void OnClickList1(NMHDR* pNMHDR, LRESULT* pResult);
 DECLARE_MESSAGE_MAP()

void CChat::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)

{

}


13. 获得List Control控件上的文本

   CString IP;

   int i=m_ListView.GetSelectionMark();  //将选择的项号赋予i  
   if(i==-1)                             //i=-1表示没有选项  
   {   

    MessageBox("请选择IP!","没有选择项...",MB_OK|MB_ICONSTOP); 
    return ;
   }
   else  
   {  
    IP=m_ListView.GetItemText(i,0); //0为要取值的列号   
   }  
 
 


14. 获取IP地址的每一部分

 CString strIP="192.168.1.1";
 CString str_ip1,str_ip2,str_ip3,str_ip4;
 int pos1=strIP.Find(".");
 str_ip1=strIP.Left(pos1);

 strIP=strIP.Right(strIP.GetLength()-pos1-1);
 int pos2=strIP.Find(".");
 str_ip2=strIP.Left(pos2);

 strIP=strIP.Right(strIP.GetLength()-pos2-1);
 int pos3=strIP.Find(".");
 str_ip3=strIP.Left(pos3);

 str_ip4=strIP.Right(strIP.GetLength()-pos3-1);
 
 int IP1,IP2,IP3,IP4;
 IP1=atoi(str_ip1);
 IP2=atoi(str_ip2);
 IP3=atoi(str_ip3);
 IP4=atoi(str_ip4);

 SOCKADDR_IN addrTo;
 addrTo.sin_family=AF_INET;
 addrTo.sin_port=htons(6500);  //使用6500端口
 addrTo.sin_addr.S_un.S_un_b.s_b1=IP1;
 addrTo.sin_addr.S_un.S_un_b.s_b2=IP2;
 addrTo.sin_addr.S_un.S_un_b.s_b3=IP3;
 addrTo.sin_addr.S_un.S_un_b.s_b4=IP4;


 15. 使EDIT控件的滚动条始终处于最下端

 ((CEdit*)GetDlgItem(IDC_EDIT_RECV))->LineScroll(1000);


 16. 获取EDIT控件的指针并填入值

 (GetDlgItem(IDC_EDIT_OBJECT))->SetWindowText("请选择对方的IP");


 17. 保存/打开文件对话框

   CString FileExt = "txt";
   CString FileName = "Output.txt";

   CFileDialog fileDlg( FALSE, //FALSE为保存,当为TRUE时,为文件打开对话框
         FileExt, //自动加上的扩展名
         FileName, //默认保存的文件名
         OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
         NULL, NULL);

    fileDlg.m_ofn.lpstrInitialDir="C://Documents and Settings//Administrator//桌面";
    fileDlg.m_ofn.lpstrTitle="保存将接收到的文件";
    fileDlg.m_ofn.lpstrFilter="All Files(*.*)/0*.*/0/0";

 if(IDOK==fileDlg.DoModal())
 {
    m_filepath=fileDlg.GetPathName();  //取文件路径  例如C:/Documents and Settings/Administrator/桌面/test.exe  
    m_filename=fileDlg.GetFileName();  //取文件全名    例如test.exe
    m_fileext=fileDlg.GetFileExt();    //取文件扩展名  例如EXE

 }


 18. 添加全局变量

 在.cpp中加入   CString IP;

  在.h中加入       extern CString IP;


 19. 自定义消息

 第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。

 第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
      // TOD 处理用户自定义消息
      ......
      return 0;
}

第三步:在类头文件的AFX_MSG块中说明消息处理函数:

class CMainFrame:public CMDIFrameWnd
{
      ......
      // 一般消息映射函数

protected:

      // {{AFX_MSG(CMainFrame)
            afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
            afx_msg void OnTimer(UINT nIDEvent);
      //}}AFX_MSG

            afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

      DECLARE_MESSAGE_MAP()
}

第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。

      BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
            //{{AFX_MSG_MAP(CMainFrame)
                  ON_WM_CREATE()
                  ON_WM_TIMER()
            //}}AFX_MSG_MAP

                  ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

      END_MESSAGE_MAP()

 


20. 自定义热键

1、加入热键处理函数声明:

afx_msg void OnHotkey(WPARAM wParam, LPARAM lParam);

2、ON_MESSAGE(WM_HOTKEY,OnHotkey)   //消息和函数发生关联  

3、向系统登记热键
 RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_ALT,'z');
 RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_ALT,'Z');

4、

void CChat::OnHotkey(WPARAM wParam, LPARAM lParam)
{
 if(wParam == 1001)  
 {
    MessageBox(“You   Press   Ctrl+Alt+z(Z)”);   
 }

}

5、在OnDestroy()函数中解除函数登记,释放系统资源。  
    UnregisterHotKey(m_hWnd,1001); 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值