|
Howdy,
The OnCtlColor function does not seem to do anything for buttons, and scrollbars.
MSDN suggests that by processing the CTLCOLOR_BTN case, the background color for all buttons in a dialog can be set. However when I try this nothing happens.
The function behaves correctly for other controls, such as edit and static controls.
In the OnCtlColor() function I have:
if (nCtlColor == CTLCOLOR_BTN)
{
pDC->SetBkMode(TRANSPARENT);
if(m_buttonBrush)
hbr = *m_buttonBrush;
}
and m_buttonBrush is created earlier.
Is it possible to use this function.. I would really like to avoid making my own custom button control and subclassing from it.
thanks,
Tom
|
|
|
|
|
Hi,
I can vaguely remember, that I also tried to use OnCtlColor a century ago. As far as I can remember, the only colour I cold change was the text colour of that button.
Regards
GSte
|
|
|
|
|
Same here. I could only control the static text, group boxes, and dialog background colors. I just tried again right now and although I do return a brush handle for CTLCOLOR_BTN (and the trace statements I added confirm that), the buttons are drawn using system colors regardless.
I ended up creating a color button class (which I wanted to avoid like you) but turned out to be a good thing because I could then make them a bit fancier (e.g. gradient paint).
|
|
|
|
|
Hi All,
I have the following Problem:
I'm using the MS C++ .NET 2003 Standard Edition on Windows XP Home. I'm not able to create Windows Forms bases applications. If I try to create such a Project I get an error window saying "specified module cannot be found" (translated from german, maybe slightly different in english version).
If I try to add a Form By using File | Add new Element and the select Windows Form I get the same error. The Project is a managed C++ Project.
Another Problem is, that if I start MS VC++ .NET and go to the "My Profile" Page or the "Online ressources Page" I get again error messges telling me that there is an error in the skript which again seems to be caused by the module not found error.
I tried reinstalling MSVC several Times, this did not help. I tried to Install a Professional Version this showed the same behaviour.
Can anyone give me a hint what is going on here?
Thanks in advance,
Ingo
|
|
|
|
|
There's only 2 things I can think of... and they might not be right.
1. Check to make sure "use managed Extensions" is set to 'YES' in your project's properties for the first problem.
2. for the second problem, I had a problem similar to that one before. Somehow one of my test apps was made using a document extension of ".htm" VS.Net seems to use .html pages for its wizards (I guess they're CDHtmlDialog-based). This may not be the problem, but just to check, double-click on a file with an .html or .htm extension and make sure it opens up your browser and not some other application. I had made a BugReporter application that had somehow gotten the .htm extension associated with it, so everytime i double-clicked a .htm file, it opened up my app. VS was having a problem because of this and couldn't open its associated .htm page to go with the dialog
My articles
www.stillwaterexpress.com
BlackDice
|
|
|
|
|
Hi all
I am facing problem with the following issues:
1.0 Mapping Mode
2.0 ScaleViewport
3.0 SetViewOrg.
I am using QZoomView a class from Codeguru as base class of my view which inturn is derived from CScrollView
Following is the OnPrepareDC function of the My View
Code:
void CPatternView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) <br />
{<br />
<br />
if ((m_Mode == MODE_ANALYSIS && m_AnalysisItem == AN_TIME_WINDOW) || <br />
(m_Mode == MODE_ANALYSIS && m_AnalysisItem == AN_WFR_DIAGRAM))<br />
{<br />
QZoomView::OnPrepareDC(pDC, pInfo); <br />
}<br />
else<br />
{<br />
CScrollView::OnPrepareDC (pDC,pInfo);<br />
pDC->SetMapMode(MM_LOENGLISH); <br />
}<br />
}
And OnPrepareDC of QZoomView
Code:
void QZoomView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)<br />
{<br />
CScrollView::OnPrepareDC(pDC, pInfo);<br />
if (!pDC->IsPrinting())<br />
{<br />
ASSERT(m_Zoom > 0.0f);<br />
int denom(1000);
int num((int)(m_Zoom * (float)denom));<br />
pDC->SetMapMode(MM_ANISOTROPIC);<br />
pDC->ScaleViewportExt(num, denom, num, denom);<br />
<br />
CRect rect;<br />
GetClientRect(&rect);<br />
CPoint pntVO = pDC->GetViewportOrg();<br />
if (m_totalDev.cx < rect.Width())<br />
pntVO.x = (rect.Width() - m_totalDev.cx) / 2;<br />
if (m_totalDev.cy < rect.Height())<br />
pntVO.y = (rect.Height() - m_totalDev.cy) / 2;<br />
pDC->SetViewportOrg(pntVO);<br />
}<br />
}
PROBLEM STATEMENT
This indicates that when I am calling QZoomView::OnPrepareDC then it changes the view settings and then if i am using onpreparedc of CScrollview then content of my view get displaced/shifted horizontally.
I just want to get the view in initial position i.e. the effect of changes made by QZoomView::OnPrepareDC get neglected.
Can you please help me in getting this done?
Sandeep
Leave your mark wherever you go
|
|
|
|
|
Any suggestions
Leave your mark wherever you go
|
|
|
|
|
Hi all,
I have a peculiar problem, may b a stupid one for gurus..
How can I make an application which appears like Visual studio 6.0.
I mean only the appearence.
the application has a tree view at the left side as in VS. Then a log or history bar at the bottom.
the right side has place for displaying the window of the selected item in tree.
Multiple windows are opened when more than one item is selected in the tree.
The tree view and the log view are dockable and resizable.
The menu has less items than VS.
There is only one tree view at the left side, that is one out of class, resource and file view.
How can I make such an application using VC++ 6 and Windows 2000?
Any suggestion or reference will be appreciated..
Thank you
|
|
|
|
|
you can create an MDI application with a CDialogBar ( container for tabbed window ( containing the tree ) and the log window ).
the dialog bars need to be created manually, while the MDI framework is created with a wizard.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
Will I get some more explanation?
You mean i shud create an MDI application and then add the container manually?
A few more lines on this issue may help me better...
thank you..
|
|
|
|
|
I have declared an object of CMap class as in my class
class X{
CMap<cstring,lpctstr,cstring,lpcstr> m_map;
......
};
I need to write getter and setter for this but dont know that exact syntax. Can anybody help me how to write getter and setter for above member.
CMap <......>getMap(); does not compile.
Regards
|
|
|
|
|
The problem here is that CMap is a collection template class. Thus, you need to decide in the beginning what key-value pairs your map represents. Try this code piece for a size. I don't know if it compiles (haven't tested it), but as far as I can think of, there should be no syntactical errors in it.
class X
{
CMap<int, int&, CPoint, CPoint&> m_map;
...<DIV>
CMap<int, int&, CPoint, CPoint&>* GetMap() { return &m_map; }
void SetMap( CMap<int, int&, CPoint, CPoint&>& m_refMap ) { m_map = m_refMap; }
...<DIV>
} Something like that, I'd presume. I'm returning a pointer-to-member by design. You could return a reference from GetMap() as well. Also, I'm passing a reference to SetMap() . Again, passing a pointer and using pointer-dereferencing operator (*) is just as good a solution. Returning a copy from GetMap() is not preferred, because the map might be huge, thus creating a copy of it would cause unnecessary overhead.
All these solutions are not the best ones, however. When considering memory efficiency, the best way would be to keep a pointer-type member variable and using dynamic memory allocation in the class. This way, a direct pointer can be returned, and the SetMap() routine can use delete accompanied by a copy constructor call.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Or you can typedef this outside of your class (in the header file):
typedef CMap<....> MyMap
and return this typedef:
MyMap getMap();
|
|
|
|
|
cedric moonen wrote:
Or you can typedef this outside of your class (in the header file):
typedef CMap<....> MyMap
and return this typedef:
MyMap getMap();
But the type of the map (template arguments) must be explicitly specified in every case, isn't that so ? I mean, you can't return a pointer to a CMap instantation that has none of the template parameters defined ?
I believe the error the asker was having is due to the lack of template arguments.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
yes of course, you need to define the template arguments of the CMap you will return. And this is logical: you cannot work with a map without knowing what's inside...
So you need to return a CMap with template parameters defined (and that is more clear using a typedef so you won't have a return type too long )
|
|
|
|
|
Hello Friends,
I am using CListView on which I had some images. Based on a boolean value for each Image, I am changing the text color. For Example, If the boolean value is true then the text color would be red else it would be COLOR_WINDOWTEXT.
I am doing this in OnCustomDraw which is shown as below:
case CDDS_ITEMPREPAINT:
CListCtrl& listCtrl = GetListCtrl();
if( found )
{
pNMLVCUSTOMDRAW->clrText = RGB(255,0,0);
listCtrl.Update(pNMLVCUSTOMDRAW->nmcd.dwItemSpec);
}
else
{
pNMLVCUSTOMDRAW->clrText = GetSysColor(COLOR_WINDOWTEXT);
listCtrl.Update(pNMLVCUSTOMDRAW->nmcd.dwItemSpec);
}
*pResult = 0;
break;
I am using as above methodology and its flickerig and I have close the application by going through the task manager.
Please tell me the solution.
Thanks in advance.
Neelesh K J Jain.
|
|
|
|
|
don't call Update()
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
|
|
|
|
|
hi
did anybody try the serial communication vc++ source code at http://www.orglerelectronic.com/visualc01.htm
I´m trying to modify this code so I can access the USB port (COM5) but I don´t know what to change... ( I have tryed the obvious chages like COM1 -->COM5 etc, but no result.
|
|
|
|
|
doneirik wrote:
so I can access the USB port (COM5)
Errr.. what do you mean by accessing USB port through COM5 ?? Do you mean that you have an USB-To-Serial adapter ? Because you cannot access USB port like a com port, this is completely different... The only case when you can do that is when the USB is used like a virtual com port (so when you use an USB-To-Serial adapter).
|
|
|
|
|
hi
Well actually now I´m working with an USB-Serial adapter, however I will also need to accessthe USB without the adapter.
My boss told me I could treat the USB like a normal COM port (because of drivers ?)Is that completely wrong?
|
|
|
|
|
I'm not entirely sure if your boss is right or wrong because I don't know the configuration of your computer systems.
The USB is a bus that resides in the computer. The low-level drivers (supplied by Microsoft) allow the bus to enumerate and identify a piece of hardware and then send a request to the registry to find the correct function driver for the device by using the vendor and product IDs returned by the USB Descriptors. This is how the bus works in a nutshell.
Your computer systems might have a pseudo-device driver that emulates a COM port. When this driver is loaded, it opens a handle to the low-level bus drivers and then creates a virtual COM port device. After this, passing a USB packet into the COM port is routed directly to the low-level drivers and thus into the bus. Needless to say, an errorneous packet might cause misbehaviour on the system. This is probably what your boss had in mind. You should ask him for clarification, though.
When this pseudo-device driver is not in use, all devices attached to the bus are represented by device objects. For each hardware device object that has a suitable function driver available and loaded, a driver object also exists. Additionally, possible filter driver objects may exist. You can use the WinObj object viewer (Google for it) to view all hardware device objects, driver objects and other object currently existing in your system. The same program can be used to obtain a valid name for a driver/device object. If you are operating on kernel mode, you can use this low-level name to open a handle into the driver/device. In user mode, only the symbolic link names, and a restricted list of device names, are available due to security restrictions imposed by Windows NT/2000/XP framework.
You can view all these through WinObj. The symbolic names can be found in the 'GLOBAL??' subtree. Actual device names can be found from 'Device' subtree. For reference, try looking for a normal COM port. You can find it lying around there somewhere. "\Device\Serial0" is COM1 for me.
From this list (Global??), you can even identify your USB device by looking at the vendor and product IDs. To get a rough idea who's device you're looking at, you can use the Linux-USB group's list, which is "somewhat" regularly updated. It can be found here[^]. All USB devices are listed in form "USB#Vid_xxxx&Pid_xxxx&MI_xx#.....". The first is the vendor ID, the next the product ID. The last one I'm not sure of.
Remember that a device might have multiple entries in WinObj's GLOBAL?? subtree. The one we are interested in is \Device\USBPDO-X which refers to a physical device object in the USB bus. Opening a handle to this device allows you to read/write from as if reading/writing a file. Security restrictions might apply, though. You can view these through WinObj as well. If you can't view the properties of an object, you don't have enough priviledges. Looking at the security tab, you can see which users have rights to read/write/modify a device.
For an example, Logitech has a vendor ID of 046d hex. I have the Logitech MX500 optical mouse attached, and it's product ID is c025 hex. Both of these are from Linux-USB list. Thus, in "GLOBAL??" I have an entry "USB#Vid_046d&Pid_c025 etc" which is a symbolink link to "\DEVICE\USBPDO-5". This is the physical device object for my MX500. Opening it's properties, I can see that in user mode, I only have 'query state' priviledge, allowing me to request status information about the device. If I was logged in as an administrator, I could also 'delete' the object, which means the device was logically detached from the bus. The bus would, however, soon re-detect the device, re-load the drivers and re-create the device objects.
I can't, in user mode, read or write from the device. For that purpose, I would need to write a kernel-mode program. This program should create a virtual device, say USB MX500 mouse, open the device handle for USBPDO-5, and route the commands sent to the virtual device to the physical device and back. A crude hack, I'd call it, but it would fill it's purpose
Well, that was a huge reply. Hope it's informative. I'm in consideration of writing an article about this matter, but my current thesis work is a priority.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
USB is more like a socket - it has it's own protocol stack etc.
When using a USB<->serial adaptor the device driver, protocol stack and adaptor are invisible so you simply see the Windows Com port.
Working directly with USB is a totally different topic !
Elaine
The tigress is here
|
|
|
|
|
thanks everybody
doneirik
|
|
|
|
|
Hi All,
I am getting error of Debug Assertion failed in my VC++ 6.0 application
Program : My Exe name
File:list_s.cpp
Line:451
When I searched for this file it is present in the src folder of the VC++ mfc installation on my machine.Location is "C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC" But this file is not present in the machine which is runnning the application.
My program exe is compiled in Debug mode.
the program extensively writes log files on the disk and CPU usage is high when the program is running.
Will it be related to memory allocation?
I am thinking so because the line 451 contains code
"ASSERT(AfxIsValidAddress(m_pNodeHead, sizeof(CNode)));"
Can anyone help me to rectify the error?
Thanks in Advance
Regards
Shailaja
|
|
|
|
|
Is the bug reproductible ? I mean, the bug appear each time you're doing some specific actions ? Or is it totaly random ?
If the bug is reproductible, you can use the debugger (F5 to start and F9 to set breakpoints) and try to localize the bug in your code.
|
|
|
|
|