|
May be you just want to capture the mouse position, and you have no problem in finding the colour, then you can set a new Timer, then in the OnTimer function, you may try GetCursorPos() to retrieve the mouse's position.
If you want to capture other mouse's action like mouse click... then take a look at global hook, as described in this Mouse and KeyBoard Hooking utility with VC++[^]
|
|
|
|
|
I found if set TTF_TRACK flag to CTooltipCtrl, SetDelayTime doesn't work anymore, so the tooltip won't disappear automatically. I want to show the tooltip just below specified control, and expect it to disappear after a few seconds(the time can set with SetDelayTime). Anybody can help me?
Here is my steps to construct tool tip:1. Add member variable
CToolTipCtrl m_tooltip;
2. override PreTranslateMessage
BOOL CPF_GetSetNameDlg::PreTranslateMessage( MSG* pMsg )
{
switch (pMsg->message)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONUP:
case WM_MBUTTONUP:
case WM_MOUSEMOVE:
m_tooltip.RelayEvent(pMsg);
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
3. OnInitialDialog
BOOL CPF_GetSetNameDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//tooltip
EnableToolTips();
m_tooltip.Create(this , WS_POPUP | TTS_NOPREFIX | TTS_BALLOON);
m_tooltip.SetDelayTime(TTDT_INITIAL, 0);
m_tooltip.SetDelayTime(TTDT_AUTOPOP, 30000);
m_tooltip.SetDelayTime(TTDT_RESHOW, 30000);
m_tooltip.AddTool(GetDlgItem(IDC_SETNAME), _T(""));
m_tooltip.SetMaxTipWidth(600);
}
4. Control to show tool tip
if(bShow)
{
m_tooltip.UpdateTipText(_T("Hello, money!"), pWnd);
CToolInfo sTinfo;
m_tooltip.GetToolInfo(sTinfo, pWnd);
sTinfo.uFlags = TTF_TRACK;
m_tooltip.SetToolInfo(&sTinfo);
CRect rect;
pWnd->GetWindowRect(rect);
m_tooltip.SendMessage(TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(rect.left, rect.bottom));
m_tooltip.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&sTinfo );
}
|
|
|
|
|
I have this code:
if(m_Bitmap.GetSafeHandle())
m_Bitmap.DeleteObject();
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, lpszPathName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if(NULL == hBitmap)
{
CString sMessage;
const DWORD dwError = ::GetLastError();
sMessage.Format(_T("Failed to load '%s' file. Reason: %s\n"), lpszPathName, GetErrorString(dwError));
AfxMessageBox(sMessage, NULL, MB_ICONERROR);
return FALSE;
}
m_Bitmap.Attach(hBitmap);
and work ok, but on the big bitmaps, I get:
Not enough server storage is available to process this command
ok, I read this one[^], and I modified the "IRPStackSize" value to 0x19 (25 decimal), not working ... hoe can I get rid of this error ?
modified 12-Jun-13 4:37am.
|
|
|
|
|
Is it really that error message and not the code 8 ERROR_NOT_ENOUGH_MEMORY message 'Not enough storage is available to process this command'?
You might google for 'loadimage ERROR_NOT_ENOUGH_MEMORY'. Reading some of the results, it seems that removing the LR_CREATEDIBSECTION flag might solve the problem. If you need a DIBSECTION bitmap and loading the image as DDB succeeds, you might try the CopyImage()[^] function afterwards to convert the loaded DDB.
|
|
|
|
|
I had removed LR_CREATEDIBSECTION flag from LoadImage function, and I had the same error ...
|
|
|
|
|
How big is your image? If you read some of the Google results, you will find that others had similar problems and solved it by using other methods to load images from files (e.g. the MFC CImage class that uses Gdiplus::Bitmap ). Check also if your image is valid by loading it with any painting program. Also check that the image is not RLE compressed.
|
|
|
|
|
I confes that the problem taking place at 750 MB bitmap file ... I agree, the picture is huge, but the Windows 7 netive viewer can open this bitmap ... Though, MSPaint (Paint windows native image editor) give the same result (even get the same error message), can not open this picture as well ...
modified 12-Jun-13 6:13am.
|
|
|
|
|
That is large; probably too large. There are system and OS depending limits for bitmaps (required memory and max. width and height). While loading the bitmap, twice the memory is required when it must be converted in some way.
It seems that the picture viewer uses some other method (e.g. allocating a buffer, reading the image line by line, converting each line to the pixel format used by the video card and finally copying the content from the buffer to the video memory).
|
|
|
|
|
Ok, you are very kind ! Kindly thank you for your interest !
|
|
|
|
|
Hello Friends
I am using SetupDigetRegistryProperty to access USB Devices.
So,regarding that I was trying to access Property SPDRP_LEGACYBUSTYPE which is described like this
Quote: SPDRP_LEGACYBUSTYPE
The function retrieves the device's legacy bus type as an INTERFACE_TYPE value (defined in Wdm.h and Ntddk.h).
I tried to get this value in char ,it returns some special character. I tried to catch in DWORD,it returns some number.
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;
SetupDiGetDeviceRegistryProperty(
hDevInfoSet,
&DeviceInfoData,
SPDRP_LEGACYBUSTYPE,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize)
Any Ideas?
Regards
Y
|
|
|
|
|
|
Thanks jochen for your Reply.
I tried ur way but it is not the value that I was looking For.
May be you can give more Ideas. here is what I want. When I right Click on USB Device from Device manager,it open up properties Dialog where we can select property and its value. Here, I found one property "bus relation" which I am trying to get using SetupDi calls.
Bus relation value is showing like this :
USBPRINT\CANONIP4200\6&19ACF&0&USB001
This is the device Instance Id.
But when I tried to get same using SetDiGetDeviceInstanceId,it gives me like
USB\VID_04A9&PID_10A2\C34BBD
How can I get USBPRINT\CANONIP4200\6&19ACF&0&USB001 ?
Regards
Y
|
|
|
|
|
|
Thanks A Lot jochen
I followed your post and get succeed in getting Bus Relation value[Device Id] which gives me Printer name.
Thank you Very Much Again.
Regards
Y
|
|
|
|
|
Nice to hear that you solved the problem and thank you for the feedback.
|
|
|
|
|
Hi,
I working on a plugin system for a MFC C++ application. So I started with a small plugin DLL with a simple function creating an object of a class with virtual functions and returning that object to the caller. The object is created on the heap and actually a pointer to the object is returned.
In the main application a function loads the plugin (LoadLibrary), searches the exported function (GetProcAddress) and executes the function. As result the created object is available, as expected. So far so good.
Btw: the class is already declared in a different DLL linked by both the main application and the plugin DLL.
Next I want to unload the plugin with FreeLibrary.
That leads to the problem of a corrupt vftable of the created object. I found out, that the __vfptr is in the memory of the plugin DLL and so unloading the DLL destroys that memory and the __vfptr is not usable anymore.
Is there any way to change that behaviour?
with kind regards,
Joerg
|
|
|
|
|
In a word: No. If the object is created from a DLL that was dynamically loaded, then you must not unload the library until all instances of the class have been deleted.
Use the best guess
|
|
|
|
|
If you unload the DLL then you remove all code from memory that represents the implementation of class methods including the actual vtable that points to these methods. Another important thing: the code that deletes the object should be in the DLL (same is true for object creation, normally you create an instance by calling an exported dll method)! One good solution to that is putting a Release() method into your class and Release() could simply do the "delete this;" stuff. Delete all class instances before unloading the DLL.
|
|
|
|
|
You could create a static function in the dll where the class is defined. This function would create the object inside the dll with parameters from the plugin. It returns the pointer to the plugin who passes it to the application. This way the object should be defined entirely in the dll so that you can unload the plugin.
However you should consider, whether it is really necessary to use the plugin unter these circumstances i.e. when the application knows the actual type of the returned object.
|
|
|
|
|
Creating webbrowser as below
hret=CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IUnknown
,reinterpret_cast<void**>(&m_pUnknown));
hret=m_pUnknown->QueryInterface(IID_IWebBrowser2,(PVOID *)&m_pBrowser);
ASSERT(SUCCEEDED(hret));
but when i say
HRESULT hret = m_pBrowser->Navigate2(varURL,&noArg,&noArg,&noArg,&noArg);
its opening new IE window on WIn7. But in Xp sys its not happening like that. I dont want to open new IE window
Any one has any idea why it is opening on new IE window on Win7
|
|
|
|
|
It's quite possible (and not unknown) for later versions to contain stricter interpretation of optional parameters. The documentation[^] shows how to set the required behaviour.
Use the best guess
|
|
|
|
|
I tried a lot on this but couldn't able to resolve this
Can any one help?
|
|
|
|
|
narasingubhanu wrote: I tried a lot on this but couldn't able to resolve this Tried what, and what results did you get? Please don't expect people to be able to guess what you have done.
Use the best guess
|
|
|
|
|
HRESULT hret = m_pBrowser->Navigate2(varURL,&varFlag,&vFrame,&noArg,&noArg);
I passed browser constants and frame also but still its opening in new window and if i call any browser function after that its crashing
ex:m_pBrowser->get_Busy(&bBusyFlag); //crash application
|
|
|
|
|
You need to use your debugger to find out why it's crashing.
Use the best guess
|
|
|
|