|
Oops Missed That Bit Out!
m_titleFont= GetDlgItem(IDC_TITLE)->GetFont();
Thanks Again
Rich
|
|
|
|
|
I found I had problems using CreateFontIndirect() with an existing font. But it was easier to create a new font instead.
LOGFONT lf;
m_titleFont->GetLogFont(&lf);
lf.lfWeight = 700; //Set Bold
CFont boldFont;
bolFont.CreateFontIndirect(&lf);
// continue to use boldFont
Hope this helps. =)
=)
|
|
|
|
|
Hello,
I am having a trouble using the SQLConfigDataSource() method. I can call it successfully with the code below:
CString sDriver;
sDriver.LoadString(IDS_SYBASE_DRIVER);
bSuccess = SQLConfigDataSource(NULL,ODBC_ADD_DSN,sDriver,
"DSN=123\0"
"DatabaseName=123\0"
"DatabaseFile=E:\\junk.db\0"
);
But when I try to put the connection string into a CString or the string table, the string gets reduced to "DSN=123" due to the required '\0' value separator. I would like to create a format string like "DSN=%s\0DatabaseName=%s\0DatabaseFile=%s\0" so can create a custom ODBC database.
Any ideas on how to do this?
Thanks in advance!
Derek
|
|
|
|
|
I would like to create a format string like "DSN=%s\0DatabaseName=%s\0DatabaseFile=%s\0"
This doesn't work because the first \0 is interpreted as the end of the format string. AFAIK neither the C string APIs nor CString support embedded null characters. BSTRs do support them, but working with plain BSTRs is a hassle, and CComBSTR doesn't handle embedded nulls well.
What I usually do is use some other unique separator like '|' when building the string, then loop thru the string and replace '|' with '\0'.
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|
|
I understand what you mean by looping through to replace the temporary separator ('|') with the required separator ('\0'), but what do you use to hold the connection string? If I use a '|'-delimited CString and then loop through and replace them with '\0', aren't I in the same boat I was before? Won't the CString still cut the string at the first NULL?
|
|
|
|
|
Won't the CString still cut the string at the first NULL?
hmm... If you absolutely must have your string in a CString, that might be tricky. C-style strings (and thus CStrings) just don't allow embedded nulls, so forcing yourself into using CString is just going to make headaches for you. Is there some specific reason you want to use CString?
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|
|
Absolutely not. I'm just so used to its functionality that I always grab for it first.
It sounds like you've done this before. How did you do it?
Thanks again!
|
|
|
|
|
I just make a big char array and do the procedure I described earlier.
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|
|
I just wanted to thank you for all your help. I ended up using a
vector lt;chargt; which worked great.
Thanks again!
|
|
|
|
|
I just wanted to thank you for all your help. I ended up using a vector<char> which worked great.
Thanks again!
|
|
|
|
|
You can also use std::string - one of the biggest differences between std::string and CString is that std::string does NOT interpret a '\0' as the end of string, so it fully supports strings containing embedded NULLs.
|
|
|
|
|
Just for the heck of it, I tried the std::string method. I had solved this using a vector<char>, but the string method looks a little cleaner. However, I couldn't get it to work with SQLConfigDataSource(). Here's the code:
CString sSybaseDriver,sSybaseConfig;
sSybaseDriver.LoadString(IDS_SYBASE_ODBC_DRIVER);
sSybaseConfig.Format(IDS_SYBASE_ODBC_ADD_DSN);
std::string sConfig(sSybaseConfig);
std::replace(sConfig.begin(),sConfig.end(),'|','\0');
BOOL bSuccess = SQLConfigDataSource(NULL,ODBC_ADD_DSN,sSybaseDriver,sConfig));
The compiler first complained that it couldn't convert a string to const char * for the last parameter in SQLConfigDataSource(). So I changed it to:
BOOL bSuccess = SQLConfigDataSource(NULL,ODBC_ADD_DSN,sSybaseDriver,sConfig.c_str()));
It compiled, but the call to SQLConfigDataSource() failed. The vector<char> is a little messy, but at least it works.
Any ideas on how to get the string version to work or should I just be happy that I found a solution?
Thanks,
Derek
|
|
|
|
|
Derek. The string sConfig must be the following format.
"DSN=Personnel Data\0UID=Smith\0PWD=Sesame\0DATABASE=Personnel\0\0"
With Double \0 in the finish. this is very important
Did you do that?
Cheers!!!!
Carlos Antollini.
|
|
|
|
|
That was it!!
Thanks for all the help!
Derek
|
|
|
|
|
when i put (at design time) a RichEdit control on a dialog i cant see the while dialog when i build and run the project.
why? and how can i solve this?
|
|
|
|
|
You must call AfxOleInit() and AfxInitRichEdit()
in InitInstance() of your CWinApp object.
Good luck
|
|
|
|
|
|
Hi,
I've implemented a system tray icon for my app and I want to have a popup menu for it. I have a message handler created to catch when the user right clicks my icon in the system tray. When this function runs, how should i determine where to place the pop up menu? I can't find a way of determining where the mouse pointer currently is?!?!
Thanks once again
Jay
|
|
|
|
|
|
This should work for you.
CPoint point;
pPopUpMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,
point.x, point.y, AfxGetMainWnd());
|
|
|
|
|
Hi,
I've made a class which inherits CEdit. I want to set up some styles for the class, so what i've tried is handling WM_CREATE.
However, it seems that CMyEditClass::OnCreate is not called when the implementation uses a dialog box control id and classwizard to bind them together.
But, if I do this:
CMyEditClass my_edit;
my_edit.Create(....);
in this case OnCreate is called. So, i've proved to myself that Edit controls in dialogs are not "Create"d. What message can I handle that is common to both methods of using the class, that is suitable for modifying styles and so on? I'd use Spy++ but I don't know how to make it catch messages send to the window when the window is only just being created.
Thanks for your help. I hope I've explained it right
J
|
|
|
|
|
So, i've proved to myself that Edit controls in dialogs are not "Create"d.
They are created, but creation occurs before MFC stuff is hooked to dialog. Override CWnd::PreSubclassWindow to avoid this problem. And remember that you can't change some ES_xxx styles at runtime.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hello
In my appp i need a combo box wich will show me available drives on the computer and a list control wich will show the files and the folders.
my quastion is: i know how to extract assosiated icon for the files, but how do i do that for the drives and for the folders?
what is the best way to this?
thanks.
|
|
|
|
|
how do i do that for the drives and for the folders?
SHGetFileInfo() can get the icon for a drive/folder. Check out A Drive Picker List Control for some sample code.
--Mike--
http://home.inreach.com/mdunn/
"Make sure that if you are using a blow torch that you don't set anything on fire."
-- Chris Maunder
|
|
|
|
|