标签: vc

  • VC+ACCESS出现: IDispatch error #3105 错误

    VC+ACCESS出现: IDispatch error #3105 错误。

    解决办法:ACCESS 文本字段 可能太短, 改成备注即可.

  • 关于SetCapture和GetCapture

    正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。
    很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,例如按钮在鼠标按下后会变为“按下”状态,鼠标移出按钮区域时“弹起”,所以按钮控件需要在鼠标按下时SetCapture,鼠标放开后ReleaseCapture
    GetCapture只是检查一下当前是哪个窗口捕获了鼠标,通常不需要调用。

  • VS2003调试DLL, 不中断的问题

    VS2003调试DLL, 不中断的问题,直接把所有工程 rebuild all,然后再 替换新生成的dll,再设置断点,调试

  • 错误: _malloc 已经在 Libcmtd.lib 中定义, 引发的思考

    错误: _malloc 已经在 Libcmtd.lib 中定义, 引发的思考:

    C++编译器选项:/MT,/MTd,/Md,/MDd
    必须让工程所使用的库都使用相同的配置,否则就会有相应的警告或错误提示,甚至出现无法解析的函数,
    有时,我们使用的库不是自己可以控制的,那么就只能把工程属性设置成你使用库的选项相同,这样可以编译通过了.

  • ShellExecute不能执行批处理文件

    ShellExecute不能执行批处理文件,以下是解决办法:

    以下代码怎么都不执行a.bat,最后通过WinExec("./a.bat", SW_SHOW);解决

    ShellExecute(NULL, "open", "./a.bat", NULL, NULL, SW_SHOW);

  • VC中给CURL设置代理

    VC中给CURL设置代理

    curl_easy_setopt(curl, CURLOPT_PROXY, "代理地址:端口");

  • VC++实现窗口抖动

    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 使用命令行编译

    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 屏幕截图

    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++托盘图标菜单弹出后,点击其它地方,菜单不消失的问题

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