VC+ACCESS出现: IDispatch error #3105 错误。
解决办法:ACCESS 文本字段 可能太短, 改成备注即可.
VC+ACCESS出现: IDispatch error #3105 错误。
解决办法:ACCESS 文本字段 可能太短, 改成备注即可.
正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture
,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture
或者调用SetCapture
设置另一个窗口为止。
很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,例如按钮在鼠标按下后会变为“按下”状态,鼠标移出按钮区域时“弹起”,所以按钮控件需要在鼠标按下时SetCapture
,鼠标放开后ReleaseCapture
。GetCapture
只是检查一下当前是哪个窗口捕获了鼠标,通常不需要调用。
VS2003调试DLL, 不中断的问题,直接把所有工程 rebuild all,然后再 替换新生成的dll,再设置断点,调试
错误: _malloc 已经在 Libcmtd.lib 中定义, 引发的思考:
C++编译器选项:/MT,/MTd,/Md,/MDd
必须让工程所使用的库都使用相同的配置,否则就会有相应的警告或错误提示,甚至出现无法解析的函数,
有时,我们使用的库不是自己可以控制的,那么就只能把工程属性设置成你使用库的选项相同,这样可以编译通过了.
ShellExecute不能执行批处理文件,以下是解决办法:
以下代码怎么都不执行a.bat,最后通过WinExec("./a.bat", SW_SHOW);
解决
ShellExecute(NULL, "open", "./a.bat", NULL, NULL, SW_SHOW);
VC中给CURL设置代理
curl_easy_setopt(curl, CURLOPT_PROXY, "代理地址:端口");
VC++实现窗口抖动,代码如下
void Move()
{
srand((unsigned)time(NULL));
HWND hWnd = ::AfxGetMainWnd()->GetSafeHwnd();
RECT rcOld, rcNew;
::GetWindowRect(hWnd, &rcOld);
::memcpy(&rcNew, &rcOld, sizeof(RECT));
int iWidth = rcOld.right-rcOld.left;
int iHeight = rcOld.bottom-rcOld.top;
int x = 0, y = 0;
for (int i =0; i<80; i++)
{
x = rand()%60-30;
y = rand()%60-30;
::MoveWindow(hWnd, rcNew.left+x, rcNew.top+y, iWidth, iHeight, TRUE);
}
::MoveWindow(hWnd, rcOld.left, rcOld.top, iWidth, iHeight, TRUE);
}
VC 使用命令行编译,创建批处理命令如下:
@echo off
taskkill /f /im MyAssistant.exe
set path=D:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE;%Systemroot%;%systemroot%/system32;
set name=MyAssistant
set outname=MyAssistant.exe
devenv /Rebuild Release "MyAssistant.sln" /project "MyAssistant.vcproj" /projectconfig Release
pause
VC++实现屏幕截图:
void CScreenDlg::OnPaint()
{
CClientDC dc(this);
// 获取屏幕DC
HDC hScrDC = ::GetDC(NULL);
// 得到屏幕分辨率
INT nHeight = GetDeviceCaps(hScrDC, VERTRES);
INT nWidth = GetDeviceCaps(hScrDC, HORZRES);
// 创建屏幕DC的兼容DC
HDC hMemDC1 = CreateCompatibleDC(hScrDC);
// 创建屏幕兼容位图
HBITMAP hBitmap1 = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// 把兼容位图选入兼容DC
HBITMAP hBitmap2 = (HBITMAP)SelectObject(hMemDC1, hBitmap1);
// 复制DC
BitBlt(hMemDC1, 0, 0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY);
// 显示
BitBlt(dc.GetSafeHdc(), 0, 0, nHeight, nWidth, hMemDC1, 0, 0, SRCCOPY);
::DeleteObject(hBitmap1);
::DeleteDC(hMemDC1);
__super::OnPaint();
}
遇到VC++托盘图标菜单弹出后,点击其它地方,菜单不消失的问题。
解决办法:在TrackPopupMenu
函数前面添加SetForegroundWindow();
即可解决.
示例代码:
POINT point;
HMENU hMenu, hSubMenu;
GetCursorPos(&point);
hMenu = LoadMenu(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MENU1));
hSubMenu = GetSubMenu(hMenu, 0);
SetMenuDefaultItem(hSubMenu, -1, FALSE);
SetForegroundWindow(); // 解决托盘图标菜单弹出后,点击其它地方,菜单不消失的问题
TrackPopupMenu(hSubMenu, TPM_BOTTOMALIGN, point.x, point.y, 0, m_hWnd, NULL);
PostMessage(WM_NULL, 0, 0);
DestroyMenu(hMenu);