| |
MFC01
| What are the recommendations for Choosing a Collection Class ?
|
MFC02
| I need to implement hover effect on a button, tell me how?
|
MFC03
| How can I programmatically set the size of that popup box?
|
MFC04
| How to get the title text CTabCtrl's tabs?
|
MFC05
| how to get CString::Format to make a 12,345.00 format (i.e. Number with comma)?
|
MFC06
| How to add or delete propertypage to or from propertysheet, after domodal been called?
|
MFC07
| How to set/remove ES_READONLY style of CEdit at runtime?
|
MFC08
| What is StdAfx.h and Why should I use it?
|
MFC09
| Difference between CDialog OnCreate vs OnInitDialog?
|
MFC10
| How to remove warning "unused parameters" ?
|
MFC11
| Has anyone attempted to use this CMFCMaskedEdit class and call GetWindowTextLength() to see if the control has any user-typed text in it?
|
|
|
|
|
Win3201
| How to programmatically differentiate between cd drive and dvd drive without a disk
media inserted?
|
Win3202
| How to create virtual registry?
|
Win3203
| A question about FreeLibrary?
|
Win3204
| How to disable the 'Alt' key System wide?
|
Win3205
| What is the differences Between CreateWindow() and CreateWindowEx?
|
Win3206
| How to Get GUID for DosDevice?
|
Win3207
| How can i get the WM_MINIMIZE message of console window?
|
Win3208
| How to get the main thread ID of a process (known by its ID) ?
|
Win3209
| How do we determine the base address of a loaded DLL?
|
Win3210
| How to tell the system to load a DLL at a base address that I specify?
|
Win3211
| How can I check if window is hidden by another window?
|
Win3212
| Difference between dynamic linking vs dynamic loading ? |
Win3213
| Is there a way to prevent the user from logging off from their Windows account while my application is running? |
|
|
|
|
GEN01
| Shall I use destructor in a pure virtural class?And when?
|
GEN02
| I have a varibale of 8 bytes (ULONGLONG). How to extract first 6 bytes from that?
|
GEN03
| Can you please tell me if there is any particular reason why the following operators
can't be oveloaded.?
|
GEN04
| Pop up like windows media player minibar(when minimised)?
|
GEN05
| How can a program know if "Microsoft Visual C++ 2010 Redistributable Package (x86)"
is installed?
|
GEN06
| How to read a UDF format file?
|
GEN07
| Simulating DOS 6.12 enviornment on Window 7?
|
GEN08
| What is the return type of a value that is in degrees minutes seconds format?
|
GEN09
| Copying text to the clipboard?
|
GEN10
| How to restrict an object being allocated on the heap?
|
GEN11
| What is the GUID for " Text transfer" in BlueTooth?
|
GEN12
| How to get all Active Windows Com Port?
|
GEN13
| My process should not get killed using Taskmgr?
|
GEN14
| difference between strcpy_s vs StringCchCopy?
|
GEN15
| Multilevel inheritance with Pure virtual function?
|
GEN16
| How To Find String Literals?
|
GEN17
| Why c++ doesn"t have virtual constructor?
|
GEN18
| What is an interrupt number?What is AX register?
|
GEN19
| How to convert double to BSTR?
|
GEN20
| Where can I get WinUSB.sys and WinUSB.dll?
|
GEN21
| Please provide cross-casting practical code?
|
GEN22
| Why "var" prints "Whats up" instead of "newval"?
|
|
|
|
|
FUN01
| Kundali match making algorithm?
|
FUN02
| Solution for water pot problem?1
|
FUN03
| How UnRAR a rar file with password ?
|
|
|
|
|
Answer
|
|
MFC
|
|
|
|
Question(MFC01)
| What are the recommendations for Choosing a Collection Class ?
|
Answer
| Please check this page on MSDN site
|
|
|
Question(MFC02)
| I need to implement hover effect on a button, tell me how?
|
Answer
| You have to call the
TrackMouseEvent function which is usually in the WM_MOUSEMOVE handler. Here
is an example -
http://blogs.msdn.com/b/oldnewthing/archive/2003/10/13/55279.aspx
|
|
|
Question(MFC03)
| How can I programmatically set the size of that popup box? |
Answer
| There's a few ways:
- Set the size when you call
Create() on the dialog. - Change the size using
SetWindowPos() - Change the size using
MoveWindow()
|
|
|
Question(MFC04)
| How to get the title text CTabCtrl's tabs?
|
Complete Question
| The following code is crashing at the last line:
TCITEM tcItem;
tcItem.mask = TCIF_TEXT;
m_ReportTabCtrl.GetItem(ID_PANE_FOUND, &tcItem);
CString csText = tcItem.pszText;
|
Answer
| You did not initialise your TCITEM structure properly; see the MSDN documentation
here.
It would be better to check the return value from all Windows function calls rather
than just assuming that they have succeeded.
|
|
|
Question(MFC05)
| How to get CString::Format to make a 12,345.00 format (i.e. Number with comma)?
|
Answer
| Consider using the API
GetNumberFormat().
|
|
|
Question(MFC06)
| How to add or delete propertypage to or from propertysheet, after domodal been called?
|
Answer
|
In your Button Event handler on the PropertyPage , just call the parent PropertySheet
"RemovePage()" function, for example, "RemovePage(this)". Be careful that if you
are removing the active page, which you most likely are, you should use the PropertySheet
function "SetActivePage()" to have some other page become active, like your welcome
page. I also use the CTreePropSheet class, or one of its derivations, and I remember
that there was some issue with deleting pages and having the tree redrawn properly.
I would test this with the standard CPropertySheet first, watching the tabs appear
and disappear properly first, then move back to the CTreePropSheet class.
|
|
|
Question(MFC07)
| How to set/remove ES_READONLY style of CEdit at runtime?
|
Answer
| you can try ModifyStyle() , or SetReadOnly()
|
|
|
Question(MFC08)
| What is StdAfx.h and Why should I use it?
|
Answer
| Precompiled headers are used to reduce the compile time by adding often required
include files there. browse
http://en.wikipedia.org/wiki/Precompiled_header ,
I would recommend, that you add the include files that most of your other application
code requires to the stdafx.h. This significantly reduces the time to build your
project.
|
|
|
Question(MFC09)
| Difference between CDialog OnCreate vs OnInitDialog?
|
Answer
| OnCreate is called just when the application requests that the Create
function be called. So it is not guarenteed that the window is fully created.
OnInitDialog
is called after the window (in this case the dialog) is
completely created.
When you are dynamically creating a control, you will specify its parent window
handle and so it has to be created completely. So always do it in OnInitDialog
as said in the previous answer.
|
|
|
Question(MFC10)
| How to remove warning "unused parameters" ?
|
Answer
| Either of the following methods will remove the warning -
void MyClass::reset(ErrorType)
{
}
OR
void MyClass::reset(ErrorType error)
{
error;
}
Or you can use the UNREFERENCED_PARAMETER macro which does the same
as the second method -
void MyClass::reset(ErrorType error)
{
UNREFERENCED_PARAMETER(error);
}
|
|
|
Question(MFC11)
| Has anyone attempted to use this CMFCMaskedEdit class and call GetWindowTextLength() to see if the control has any user-typed text in it?
|
Answer
|
When MFC controls exhibit strange behavior I always take a look at the source code for the control located in the
\VC\atlmfc\src\mfc installation path .
If you look at the Microsoft implementation within afxmaskededit.cpp you will find that the CMFCMaskedEdit class handles the WM_GETTEXTLENGTH, WM_GETTEXT and WM_SETTEXT messages overriding the default CWnd behavior.
The CMFCMaskedEdit class is actually returning the length of an internal CString buffer in response to the WM_GETTEXTLENGTH message.
Therefore the Microsoft documentation that states: 'EN_CHANGE notification code is sent when the user has taken an action that may have altered text in an edit control. Unlike the EN_UPDATE notification code, this notification code is sent after the system updates the screen.' would not apply to this particular window class.
Unfortunately you will have to implement something outside the box here. A couple of ideas:
Option [1] Highlight all of the code in afxmaskededit.cpp and afxmaskededit.h and copy/paste into DavidCrowsMaskedEdit new class and change/improve the behavior.
Option [2] You could override PreTranslateMessage and check for the WM_KEYUP message belonging to the CMFCMaskedEdit control.
Once the control has recieved this message... the CMFCMaskedEdit should have updated its internal buffer because it does its filtering
in response to the WM_CHAR message. Note that this method will not handle copy/cut/paste from the clipboard so your mileage may vary.
BOOL YourMaskDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_KEYUP == pMsg->message)
{
if(::GetDlgCtrlID(pMsg->hwnd) == m_YourMaskEdit.GetDlgCtrlID())
{
int iLength = m_YourMaskEdit.GetWindowTextLength();
if(iLength)
{
CString str;
m_YourMaskEdit.EnableGetMaskedCharsOnly(TRUE);
m_YourMaskEdit.GetWindowText(str);
str.Remove(_T('_'));
BOOL UserAddedText = str.GetLength();
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
Option [3] You could actually get the window text or text length in your WM_CTLCOLOR handler. Something like:
HBRUSH YourMaskDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == m_YourMaskEdit.GetDlgCtrlID())
{
}
return hbr;
}
I know it seems like a complete hack... by looking at window text in the WM_CTLCOLOR handler but that is actually how Dr. Joseph Newcomer did it in his old validating CEdit class.
That is really all I can think of for solving your problem.
To be honest I generally avoid many of the MFC classes... I usually reinvent the wheel... because sometimes my wheels are more round. And if my new wheel ends up square... well at least I learned something in the process.
|
|
|
|
|
WINDOW32
|
|
|
|
Question(WIN3201)
| How to programmatically differentiate between cd drive and
dvd drive without a disk media inserted?
|
Answer
| Use GetDriveType WIN32 Api, and then way to determine if the device is actually
a DVD-drive is to use DeviceIOControl such as follows:
#include
<winioctl.h>
BOOL DeviceSupportsDVDMedia(TCHAR *szDrive)
{
BOOL bRet = FALSE;
if(NULL != szDrive && DRIVE_CDROM == GetDriveType(szDrive))
{
GET_MEDIA_TYPES media[CHAR_MAX];
TCHAR szVol[MAX_PATH] = {0};
DWORD dwBytesRet =0;
int iSize = CHAR_MAX * sizeof(GET_MEDIA_TYPES);
_stprintf(szVol,_T("\\\\.\\%c:"),szDrive[0]);
HANDLE hDevice = CreateFile(szVol,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
if(INVALID_HANDLE_VALUE != hDevice)
{
if(DeviceIoControl(hDevice,IOCTL_STORAGE_GET_MEDIA_TYPES_EX,NULL,0,media,iSize,&dwBytesRet,FALSE))
{
bRet = FILE_DEVICE_DVD == media->DeviceType;
}
}
}
return bRet;
}
|
|
|
Question(WIN3202)
| How to create virtual registry?
|
Answer
| Look here
Registry Virtualization[^]
|
|
|
Question(WIN3203)
| A question about FreeLibrary?
|
Complete Question
|
HMODULE hModule = ::LoadLibrary("GameLogicWZQ.dll");
typedef GameObject* (*CreateObjProc)();
CreateObjProc pCreateProc = (CreateObjProc)::GetProcAddress(hModule,"CreateGameObject");
m_pGameObject = pCreateProc();
::FreeLibrary(hModule);
If the pCreateProc() function allocates a buffer size of 1024 (using
new), then after calling ::FreeLibrary(hModule) , will the buffer be
free?
|
Answer
| No, it won't. A corresponding function should be exported from the DLL that frees
that memory. And this function could be called (the same way the Create function
is called).
|
|
|
Question(WIN3204)
| How to disable the 'Alt' key System wide?
|
Answer
| You might need a kernel-mode device driver.
http://technet.microsoft.com/en-us/sysinternals/bb897578.aspx
|
|
|
Question(WIN3205)
| What is the differences Between CreateWindow() and CreateWindowEx?
|
Answer
| That are WinApi calls that can be found on MSDN. The Ex stands for extension and
if you have a look at the link you'll see that the Ex version has some more options
that weren't available at the time of windows 95/98. There are many more api extensions
of methods by the way.
|
|
|
Question(WIN3206)
| How to Get GUID for DosDevice?
|
Complete Question
| I'm trying to convert a device name of the form "\Device\HarddiskVolumeXX" to a
name of the form "\\?\Volume{GUID}.
|
Answer
| To start with, run:
mountvol /?
mountvol /L
You will see available mount points for your system.
See http://technet.microsoft.com/en-us/library/cc772586%28WS.10%29.aspx.
Read this CodeProject article: Inside Mountvol.exe about volume mount points and
SDK APIs. See also:
|
|
|
Question(WIN3207)
| How can i get the WM_MINIMIZE message of console window?
|
Answer
| Probably it isn't a good idea, have a look at the following discussion
"Message handling in a console app".
|
|
|
Question(WIN3208)
| How to get the main thread ID of a process (known by its ID) ?
|
Answer
| Much faster, but only WIN32: Get the ThreadId with this function:
DWORD GetMainThreadId(DWORD pId)
{
LPVOID lpThId;
_asm
{
mov eax, fs:[18h]
add eax, 36
mov [lpThId], eax
}
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, pId);
if(hProcess == NULL)
return NULL;
DWORD tId;
if(ReadProcessMemory(hProcess, lpThId, &tId, sizeof(tId), NULL) == FALSE)
{
CloseHandle(hProcess);
return NULL;
}
CloseHandle(hProcess);
return tId;
}
|
|
|
Question(WIN3209)
| How do we determine the base address of a loaded DLL?
|
Answer
| The HMODULE that you get from the
GetModuleHandle function is the same as the base address. If you are writing
MFC applications... this will be the same address returned from
AfxGetResourceHandle. The
AfxGetInstanceHandle function is actually returning the base address
of the main application image.
If you are using a Microsoft compiler then you also have access to an extern variable
__ImageBase which can be used to access the these base addresses. Because it is
equal to an HMODULE you can also use this variable for loading
resources.
Now that we have the base address we can read the
PE image headers and check for a size:
DWORD GetSizeOfImage(HMODULE hModule))
{
DWORD dwSize = 0;
PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER)hModule;
PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((PBYTE)hModule + pDOSHeader->e_lfanew);
if(IMAGE_NT_SIGNATURE == pNTHeader->Signature)
{
PIMAGE_FILE_HEADER pFileHeader = (PIMAGE_FILE_HEADER)((PBYTE)&pNTHeader->FileHeader);
PIMAGE_OPTIONAL_HEADER pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)((PBYTE)&pNTHeader->OptionalHeader);
if(IMAGE_NT_OPTIONAL_HDR32_MAGIC == pNTHeader->OptionalHeader.Magic)
{
dwSize = pNTHeader->OptionalHeader.SizeOfImage;
}
}
return dwSize;
}
|
|
|
Question(WIN3210)
| How to tell the system to load a DLL at a base address that I specify?
|
Answer
| Check out the
/FIXED (Fixed Base Address) linker option.
I consider fixed base addresses to be an insecure option... I highly recommend that
all software engineers support a dynamic base address.
PE images with support for
ASLR will have the IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE bit set in the
PE image characteristics. These modules are essentially saying 'put me anywhere
you want... I don't care' and the kernel pseudo-randomly chooses an address to map
the image.
PE images without support for ASLR... the NT kernel will make an attempt to load
the image at its preferred address at pNTHeader->OptionalHeader.ImageBase . If the
address is already allocated the kernel will make an attempt to map the image at
another address and apply its fixups.
|
|
|
Question(WIN3211)
| How can I check if window is hidden by another window?
|
Answer
| The GetClipBox
Function will return a NULLREGION if the window is completely obscured.
Unfortunately this will not work if DWM/Aero is enabled and you will probably need
to calculates the intersections.
|
|
|
Question(WIN3212)
| Difference between dynamic linking vs dynamic loading ? |
Answer
|
Dynamic linking: your code is built to use functions in a shared library; your code runs, the OS finds the shared lib and gives you access to the functions you need.
Dynamic loading: your code can discover, load and execute code from shared libraries. but the shared libraries might not even exist at run time. your code explicitly loads the shared library. best example of this is plugins.
|
|
|
Question((WIN3213)
| Is there a way to prevent the user from logging off from their Windows account while my application is running? |
Answer
| Method for XP or earlier is slightly different from Vista/Win7 from my experience.
For XP or earlier, return 0 for WM_QUERYENDSESSION and this should be enough.
For Vista/Win7, I haven't found a way to entirely stop logging off. But temporarily blocking logging off is possible. I would return 1 for WM_QUERYENDSESSION and register a blocking reason during WM_ENDSESSION , by calling ShutdownBlockReasonCreate. Then call ShutdownBlockReasonDestroy when your application is finished running.
You should obey the description mentioned in
WM_ENDSESSION Message and
WM_QUERYENDSESSION to make sure both user and Windows system are happy.
|
|
|
|
|
GENERAL
|
|
|
|
Question(GEN01)
| Shall I use destructor in a pure virtural class?And when?
|
Complete Question
| Recently, I got a question, about pure virtual class. Sometimes I need to design
an interface for my job, looks like:
class CInterface
{
virtual ~CInterface()=0{}
virtual void SomeAction()=0;
}
class DerivedA:public CInterface
{
DerivedA(){}
~DerivedA(){}
void SomeAction()
{
cout<<"Action from Derived class A ."<<endl;
}
}
But what make me confused is that it works well after I change CInterface,like below:
class CInterface
{
virtual void SomeAction()=0;
}
So, my question is, shall I use destructor in a pure virtural class?And when?
|
|
|
Answer
| Answer#1
You only need a destructor if you need to deallocate pointers (or free resources)
that were allocated within the pure virtual class itself.
Answer#2
I think you declared the destructor of CInterface as private(default declaration),
so that is why your first code did not worked.In the second since you commented
it compiler generated the default destructor for you. But As for as i know you should
declare virtual destrucor and in the Interface(Generic Class).The use of this destructor
will be explained in this example,
class CInterface
{
public:
virtual ~CInterface() = 0 {};
virtual void SomeAction()=0;
};
class DerivedA:public CInterface
{
public:
DerivedA(){}
~DerivedA(){cout<<"In Deriveda"<<endl;}
void SomeAction()
{
cout<<"Action from Derived class A ."<<endl;
}
};
int main()
{
CInterface* A = new DerivedA;
delete A;
return 0;
}
So if you delete A pointer the CInterface destructor will be called automatically
by the compiler. if you wont decalre it as virtual or not declared at all the CInterface
destructor will not be called. As for as i know virtual ~CInterface() = 0; and virtual
~CInterface(); are same in a Interface with only one differance. i.e. If you want
to make a class pure virtual and that class is not having any functions then you
can make the destructor as pure virtual, so that the whole class become virtual.
Answer#3
If your base class doesn't define a virtual destructor and your inherited classes
implement a destructor, then you will encounter the problem he described: your derived
destructors will not be called if the object you are deleting is not from that exact
class (a base class pointer). To make short I would say: always define a virtual
destructor in your base abstract classes.
- If you implement a destructor in a derived type, this destructor will be called
in any case.
- If you don't need a destructor in your inherited classes, this will not hurt.
|
|
|
Question(GEN02)
| I have a varibale of 8 bytes (ULONGLONG ). How to extract first 6 bytes from that?
|
Answer
| Here this might help
#include <windows.h>
#include <iostream>
using namespace std;
union MyUnion
{
ULONGLONG ull;
BYTE b[8];
};
int main()
{
ULONGLONG v = 0x0123456789ABCDEF;
MyUnion mu;
mu.ull = v;
for (int i=0; i<6; i++)
{
cout << hex << (INT) mu.b[i] << endl;
}
}
|
|
|
Question(GEN03)
| Can you please tell me if there is any particular reason why the following operators
(. :: ?: sizeof)can't be oveloaded..
|
Answer
| You can read what the inventor of the language, Bjarne Stroustrup, thinks about
this right here[^]. No-one can give you a better explanation than him.
|
|
|
Question(GEN04)
| Pop up like windows media player minibar(when minimised)?
|
Answer
| What you need is a Deskband.There are 4 types of deskband objects. 3 of them reside
inside internet explorer. The last one is on the desktop.Look at the second image
in the article
Implementing Shell Desk Band and Internet Explorer Bars
|
|
|
Question(GEN05)
| How can a program know if "Microsoft Visual C++ 2010 Redistributable Package
(x86)" is installed?
|
Answer
| From MSDN blogs: How to detect the presence of
Visual C++ 2010 redistributable package.
|
|
|
Question(GEN06)
| How to read a UDF format file?
|
Answer
| What You need can be found at :
http://msdn.microsoft.com/en-us/library/aa366216(VS.85).aspx all necessary
interfaces are there ..
|
|
|
Question(GEN07)
| Simulating DOS 6.12 enviornment on Window 7?
|
Answer
| You can use DosBox under Windows XP. It should
probably work under Windows 7 too.
|
|
|
Question(GEN08)
| What is the return type of a value that is in degrees minutes seconds
format?
|
Answer
| I would say the return type should be an Angle (or Bearing, ..). Create a class
Angle to use. Internally it can use a floating point member for the decimal value.
Then add a string formating member function to get the desired string when needed.
Advantages: Easy to perform calculations, and you can reduce the risk of
mixing units, such as degrees and radians. I use the following if it helps you in
any way
class angle
{
public:
enum unit
{
rad = 0,
deg = 1
};
angle() : r(0.) {}
explicit angle(double a, unit u = rad) {
if (u == rad) r = a; else r = a*M_PI/180;
}
angle(const angle& fi) : r(fi.r) {}
double radians() const { return r; }
double degrees() const { return r*180/M_PI; }
void normalize() {
while(r<-M_PI)r+=2*M_PI;while(r>=M_PI)r-=2*M_PI;
}
void normalize_positive() {
while(r<0.)r+=2*M_PI;while(r>=2*M_PI)r-=2*M_PI;
}
angle& operator= (const angle &fi) { if (&fi != this) r = fi.r; return *this; }
angle& operator+= (const angle &fi) { r += fi.r; return *this; }
angle& operator-= (const angle &fi) { r -= fi.r; return *this; }
bool operator== (const angle &fi) { return r == fi.r; }
bool operator> (const angle &fi) { return r > fi.r; }
bool operator< (const angle &fi) { return r < fi.r; }
bool operator>= (const angle &fi) { return r >= fi.r; }
bool operator<= (const angle &fi) { return r <= fi.r; }
angle operator- () { return angle(-r); }
angle operator- (const angle& fi) { return angle(r-fi.r); }
protected:
double r;
};
You can easily add your formating functions to this class, or better yet, create
a formating class that does the job on an angle instance
|
|
|
Question(GEN09)
| Copying text to the clipboard?
|
Complete Question
| Nowadays, when copying text to the clipboard, is it any better to
SetClipboardData as CF_UNICODETEXT instead of CF_TEXT ? Will it make a difference for the pasting
entity ?
|
Answer
|
Answer#1
According to MSDN : The system implicitly converts data between certain clipboard
formats: if a window requests data in a format that is not on the clipboard, the
system converts an available format to the requested format. The system can convert
data as indicated in the following table.
Clipboard Format | Conversion Format | Platform Support
CF_OEMTEXT | CF_TEXT | Windows NT/Windows 2000, Windows 95/Windows 98/Windows Me
CF_OEMTEXT | CF_UNICODETEXT | Windows NT/Windows 2000
CF_TEXT | CF_OEMTEXT | Windows NT/Windows 2000, Windows 95/Windows 98/Windows Me
CF_TEXT | CF_UNICODETEXT | Windows NT/Windows 2000
CF_UNICODETEXT | CF_OEMTEXT | Windows NT/Windows 2000
CF_UNICODETEXT | CF_TEXT | Windows NT/Windows 2000
Let me have a simple try on the windows xp:
SetClipboardData(, CF_TEXT);
IsClipboardFormatAvailable(CF_TEXT); IsClipboardFormatAvailable(CF_UNICODETEXT); GetClipboardData(CF_TEXT); GetClipboardData(CF_UNICODETEXT);
but I test on the windows 98, if you SetClipboardData with CF_TEXT , then you must
GetClipboardData with CF_TEXT , and if you SetClipboardData with CF_UNICODETEXT ,
you must GetClipboardData with CF_UNICODETEXT . when I SetClipboardData with
CF_UNICODETEXT , the notepad(win98) can't paste text from clipboard. so, if you wanna support the
windows 98, you must SetClipboardData with CF_TEXT , else you can use any one of
them. I recommend you use unicode.
Answer#2
It is better just because you can use Unicode. If your application allows to
enter Unicode at all, CF_TEXT is absolutely unacceptable, use CF_UNICODETEXT . This
reduces the problem to this one: do you want to support Unicode at all? It really
depends on your application and requirements. An application can really be non-Unicode
when it supports only ASCII (not even ANSI beyond the code point of 127). Some applications
like that do have some right to exist.As a rule of thumb, though, I think its the
best to assume that the time of non-Unicode texts has gone.
|
|
|
Question(GEN10)
| How to restrict an object being allocated on the heap??
|
Answer
| One way can be declaring a
private:
operator new(size_t);
in the class. No implementation is needed. Simply an expression like new yourclass
dosn't compile since a class new operator is declared but cannot be called, being
private. This is similar as declaring copy and assign as private to disable copy
and assignment capabilities produced by default.
|
|
|
Question(GEN11)
| What is the GUID for " Text transfer" in BlueTooth?
|
Answer
| OBEX is used to send files. For sending simple text, SerialPortServiceClass_UUID.
|
|
|
Question(GEN12)
| How to get all Acitve Windows Com Port?
|
Answer
| You can refer this article
Serial ports. Enumeration and FIFO control
|
|
|
Question(GEN13)
| My process should not get killed using Taskmgr?
|
Complete Question
| I have launch one process in windows start up. I want that process should not get
killed using task manager or any such application. How should I go for this?
|
Answer
|
Answer#1
I believe a common approach is to use a "watchdog" process that monitors
the main process and re-starts it if it is terminated. Then of course the main process
must monitor the watchdog. Not bullet proof but annoying enough.
Answer#2
- Windows has Job Kernel Object which can be used to monitor activities of processes,
even it can be used to monitor the process which created it.
JOB_OBJECT_MSG_EXIT_PROCESS can be used to if the process gets terminated. - By handling the above message the terminated process can be restarted by calling
CreateProcess () or spawn().
Answer#3
If you are operating at the "USER LEVEL " (your process is running under the
user account, respect to the OS) then you cannot do that (and it sounds very suspicions
doing that).
You application, respect to the user, has exactly the same rights every other application
has, and don't include the right to change the OS behavior respect to the computer
(that belongs to the user, not to you) or to the user himself (he has the licence
to use all the features of the OS he payed for, not you)
Of course you can implement some tricks like making another process to control the
first and restart it if dead. But the user can himself stop them both.
If you own the computers (in the same that they belong to a same organization you
and your users also belongs) the clean solution is to operate a process running
at system level (in practice a service) running under an administrative account
(ideally a specific one) distinct from the user one, that has the grant to start
process under user impersonation. In other words, you create in your organization
a "user" that has the power to control the user's running process.
|
|
|
Question(GEN14)
|
Difference between strcpy_s vs StringCchCopy ?
|
Answer
| Answer#1
If you really want to use the "safe" ones (they are not really safe, and
are slow), I'd go with strcpy_s. It is provided with CRT, whereas
StringCchCopy depends on Windows version - it is supported only in XP SP2 and above.
Answer#2
Both Versions are "Secure". I personally prefer the "StringCchCopy" versions
since they are cleaner and more consistent then the *_S versions.
|
|
|
Question(GEN15)
| Multilevel inheritance with Pure virtual function?
|
Complete Question
| Suppose if the class hierarchy as shown below:
A
|
B
|
C
class C is derived from class B which is in-turn derived from class A;
Class A has some pure virtual functions which have been defined by B with respect
to its context;
my query is: if in Class C the pure virtual functions
are to be redefined to its specific context then How do I do it????
|
Answer
| For instance:
#include
<iostream>
using namespace std;
class A
{
public:
virtual void show()=0;
};
class B: public A
{
public:
virtual void show(){cout << "Hey, I'm a B" << endl;}
};
class C: public B
{
public:
virtual void show(){cout << "Hey, I'm a C" << endl;}
};
int main()
{
A * p = new C();
p->show();
}
outputs
Hey, I'm a C
|
|
|
Question(GEN16)
|
How To Find String Literals?
|
Answer
|
Answer#1
Concrete regular exceptions is not something to be known to be in someone's possession.
This is something to be build to the required task. No, they won't help you where
a serious parser is required. Do I understand you right that you want to parse C++
code? You will need to learn this field. Start here:
Answer#2 The Find and Replace feature in Visual Studio will accept regular
expressions: Regular
Expressions (Visual Studio)
To search for single and double quoted literal string and replace them with the
_T macro:
- Backup your project! I take no responsibility for the outcome.
- Open Find and Replace menu.
- Add the following text into the find box: {:q}
- Add the following to the replace box: _T(\1)
- Iterate through the matches and selectively replace your strings. I recommend avoiding
the Replace All button as undo will probably not be available.
Note that #include statements and various other unwanted positive matches will occur
with this method. You should make a backup of your project just in case something
goes wrong.
|
|
|
Question(GEN17)
| Why c++ doesn"t have virtual constructor?
|
Answer
| The "virtual " mechanism depends on the VTable , which will be setup by the constructor.
So, the constructor itself cannot be virtual (not with C++), even though you could
try something like
this. The link that I've provided to you is among one of the best C++ FAQs
on the internet. You may as well refer to it to read about Virtual destructors and
other basic C++ stuff.
When you construct your object, you always know the type of object you want to create
at that time (you always call a specific constructor, not the one from the base
class). So, it doesn't make sense to have a virtual constructor. Virtual destructors
make more sense: when you destroy your object, you often manipulate objects as a
pointer to their base class (typical scenario where polymorphism is used). In that
case, you want to call the correct version of your destructor.
|
|
|
Question(GEN18)
| What is an interrupt number? What is AX register?
|
Answer
| Interrupt numbers are used by the hardware to signal the operating system when some
external event occurs. The AX register is merely a general purpose register used
by the CPU. Neither of them are specific to a mouse program (whatever that may be).
Take a look
here for some information on how processors work.
|
|
|
Question(GEN19)
| How to convert double to BSTR ?
|
Answer
| Answer#1
You may just represent a double value with a BSTR , for instance
#include <windows.h>
#include <tchar.h>
#include <sstream>
using namespace std;
int main()
{
wostringstream wos;
double d = 0.57;
wos << d;
BSTR bstr = SysAllocString(wos.str().c_str());
SysFreeString(bstr);
}
Answer#2
Why not use VarBstrFromR8
Windows API?
There are many other
Data Type Conversion Functions provided with Windows too.
|
|
|
Question(GEN20)
| Where can I get WinUSB.sys and WinUSB.dll?
|
Answer
| It comes as a co-installer along with WDK. Read winusb_howto.docx on
this page - How
to Use WinUSB to Communicate with a USB Device
|
|
|
Question(GEN21)
| Please provide cross-casting practical code?
|
Answer
| I'll give a generic example.Imagine we have four class : ANIMAL, FLYER, DOG, CROWN .
class Animal {
public:
virtual ~Animal() {};
void talk (string sound) {
cout << " Grrrr " << (char *)&sound << endl;
}
};
class Flyer {
public:
void fly (string destination) {
cout << " Flying to " << (char *)&destination << endl;
}
};
class Dog:public Animal{
};
class Crow:public Animal, public Flyer{
};
To save the object of type Dog and Crow we need to do an upcast to the base class
animal. when we need to call a fly() method of each Crow we need to know if the
animal inherits from Flyer class or not, this is done by a cross-cast :
Flyer* myAnimal = dynamic_cast<Flyer*>(pAnimal);
if(!myAnimal)
cout<<" my animal can't fly :( ..."<< endl;
else
cout<<" my animal can flye :) ..."<< endl;
|
|
|
Question(GEN22)
| Why "var" prints "Whats up" instead of "newval"?
|
Complete Question
| In Release mode with VS2008, Why "var" prints "Whats up" instead of "newval" It
crashes in debug mode. I guess the reason might be the auto-memory allocation is
"read-only". If I use char *var = new char[15] then it works fine.
#include <stdio.h>
#include <conio.h>
#include <string>
int main()
{
char *var = "\nWhats Up";
strcpy(var, "newval");
printf(var);
getch();
return 0;
}
|
Answer
| When you create var in this way it is pointing to a constant string so your strcpy ()
command is not allowed. What you should code is:
char *var = "\nWhats Up";
var = "newval";
char var[] = "\nWhats Up";
strcpy(var, "newval");
although in the second case you could easily overwrite the buffer if you are not
careful.
|
|
|
FUNNY
|
|
|
|
Question(FUN01)
| Kundali match making algorithm?
|
Complete Question
|
Astrology is a complete science, learning it takes years. There is no shortcut to
learn it by google.
You need to go step by step to learn the fundamentals. I dont think you will get
an algorith online just like that.
It is something that only astrology professor can tell you. Please contact them
|
Answer
| Try using a search engine.
|
|
|
Question(FUN02)
| Solution for water pot problem?
|
Complete Question
| There are 5 pots having different amount of water and total amount of water in all
the pots is 10 liters.
now we want to have 2 liters of water in each pot but in minimum no of transactions.
in starting we can have an array showing the initial content of water in each of
the pot or any other structure can also be used.
So please suggest me any algorithm or a way so that i can find an algorithm to solve
above problem.
|
Answer
| Fill up the pots with water and wait for enough time to pass so there is only 2
liters of water left in the pots.
We don't do your homework
|
|
|
Question(FUN03)
| How UnRAR a rar file with password ?
|
Answer
| If you want have a look at source code of a program able to deal with RAR files
than check out 7-Zip sources. On the other hand
if you wish to hack a password-protected RAR file, I doubt you are going to get
help here.
|
|
|