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);