vc如何实现EXE程序的停靠,各位大侠帮忙 因为以前做了好几个程序已经开发完成,但时间有点久了,所以现在不能再编译了,现在公司要求做一个做一个按纽程序,点一下BUTTON,打开一个程序,要求: 打开EXE程序之后要停靠在按纽程序边上,拖动按纽程序也会随之移动, 不知道各位有没有做过,帮帮小弟,先谢谢大家了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同时,还要实现打开和关闭exe程序功能 CPoint m_ptOrgin(0, 0); // 成员变量BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(WM_LBUTTONDOWN == pMsg->message) { m_ptOrgin.x = LOWORD(pMsg->lParam); m_ptOrgin.y = HIWORD(pMsg->lParam); } if(WM_MOUSEMOVE == pMsg->message) { CWnd* pWnd = GetDlgItem(IDC_BUTTON1); ASSERT(pWnd); if(pWnd->GetSafeHwnd() == pMsg->hwnd && MK_LBUTTON == pMsg->wParam) { CRect rc; pWnd->GetWindowRect(rc); ScreenToClient(rc); int nWidth = rc.Width(); int nHeight = rc.Height(); CPoint pt(LOWORD(pMsg->lParam), HIWORD(pMsg->lParam)); CRect rect; rect.left = rc.left + (pt.x - m_ptOrgin.x); rect.top = rc.top + (pt.y - m_ptOrgin.y); rect.right = rect.left + nWidth; rect.bottom = rect.top + nHeight; pWnd->MoveWindow(rect); } } return CDialog::PreTranslateMessage(pMsg);} CreateProcess,关闭窗口FindWindow,发送WM_CLOSE消息 HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName ); BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint ); 你这个是实现了窗口停靠,但你针对的是你程序的内部的dialgo,我要实现对外部EXE程序的这种功能才行, 还有,关闭和打开EXE程序功能 [Quote=引用 6 楼 visualeleven 的回复:]////////////////////////////////////////////////////////////////////////////我想问一下,我怎么使外部的EXE跟着一起移动呀, FindWindow的到你打开的外部窗口句柄后那不是简单了。每次移动都发送消息来调整外部窗口的位置。 你的时候是你移动A.exe的窗口的时候也想让B.exe也跟着一起移动??? 如果是这样的话,你可以在A程序中添加处理WM_WINDOWPOSCHANGING消息,利用FindWindow或者其他函数得到B程序的HWND窗口句柄,然后再WM_WINDOWPOSCHANGING消息响应函数中利用MoveWindow/SetWindowPos来改变B程序窗口的区域 matlab中读取xml 请大虾们给我推荐一本学习VC的经典教程吧 问题 毕业2年了,户口在学校也放了2年,现正在办迁回手续,但不知那个报到证有什么用处? 郁闷 请大家帮我看看 如何使用iphlpapi.dll呢?弱弱地问 高手请进,急急急!!! 大牛们来看一下吧,有很重要的问题!!!!(有兴趣的可以讨论一下) C++的代码重用从哪里体现出来? 在CPP中如何知道谁调用的自己? VC中二维数组的使用
CPoint m_ptOrgin(0, 0); // 成员变量
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(WM_LBUTTONDOWN == pMsg->message)
{
m_ptOrgin.x = LOWORD(pMsg->lParam);
m_ptOrgin.y = HIWORD(pMsg->lParam);
} if(WM_MOUSEMOVE == pMsg->message)
{
CWnd* pWnd = GetDlgItem(IDC_BUTTON1);
ASSERT(pWnd);
if(pWnd->GetSafeHwnd() == pMsg->hwnd && MK_LBUTTON == pMsg->wParam)
{
CRect rc;
pWnd->GetWindowRect(rc);
ScreenToClient(rc);
int nWidth = rc.Width();
int nHeight = rc.Height();
CPoint pt(LOWORD(pMsg->lParam), HIWORD(pMsg->lParam));
CRect rect;
rect.left = rc.left + (pt.x - m_ptOrgin.x);
rect.top = rc.top + (pt.y - m_ptOrgin.y);
rect.right = rect.left + nWidth;
rect.bottom = rect.top + nHeight; pWnd->MoveWindow(rect);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
BOOL MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);
每次移动都发送消息来调整外部窗口的位置。