|
You may need to use AfxSetResourceHandle() to set the HINSTANCE of the DLL before creating
the dialog. If only some resources are in the DLL and some are in your app then you'll want to
restore the HINSTANCE of the app with AfxSetResourceHandle when you're done creating the dialog.
HINSTANCE hResourceDLLInstance = NULL;
hResourceDLLInstance = LoadLibrary("MyResource.dll");
...
...
// Create a dialog - Dialog resource is in MyResource.dll
HINSTANCE hOldResourceInstance = AfxGetResourceHandle();
AfxSetResourceHandle(hResourceDLLInstance);
...
// Create the dialog here
...
AfxSetResourceHandle(hOldResourceInstance);
|
|
|
|
|
Hi Thanks for quick response.
Infact application don't have resource, all resource is in DLL. Still I'm using "AfxSetResourceHandle( )". But still it's failing...
Pradeep
|
|
|
|
|
Does the DIALOG resource have a CLASS statement?
|
|
|
|
|
Probably he's not using MFC extension dll for resource dll, and the resource is not found in dll chain?
|
|
|
|
|
Cristian Amarie wrote: Probably he's not using MFC extension dll...
Yes. I'm thinking that the MFC initialization code which registers the built-in window classes
needs to be called in the DLL since it associates the class with the HINSTANCE.
I didn't think this was necessary because I use a resource-only DLL (without any MFC in the DLL)
and use dialog resources from the DLL in a MFC app but I just looked at the code (I haven't looked
at it in years ) and I'm loading the dialog resource into memory then creating the dialog
indirectly with MFC
|
|
|
|
|
I'm using "Win32 Dynamic Link Library". Because I have used a "Resource-Only DLL" (referred MSDN Creating a Resource-Only DLL).
Am I suppose to use MFC Extension DLL here?
|
|
|
|
|
Does this work?
HRSRC hResource = FindResource(hResourceModule, MAKEINTRESOURCE(IDD_MYDIALOG), RT_DIALOG);
HGLOBAL hTemplate = LoadResource(hResourceModule, hResource);
MyDialog.CreateIndirect(hTemplate, pParentWnd);
|
|
|
|
|
Yes, it's working fine but it will creates Modeless dialog. If I use this code dialog will come and disapears.
Infact I have Modal dialog. I'm not able not invoke using "MyDialog.DoModal();"
Thanks & Regards,
Pradeep
|
|
|
|
|
HRSRC hResource = FindResource(hResourceModule, MAKEINTRESOURCE(IDD_MYDIALOG), RT_DIALOG);
HGLOBAL hTemplate = LoadResource(hResourceModule, hResource);
MyDialog.InitModalIndirect(hTemplate, pParentWnd);
MyDialog.DoModal();
|
|
|
|
|
No, In "MyDialog.InitModalIndirect(hTemplate, pParentWnd); will get some assertions.
Is it a better idea to implement our own "DoModal( )".
I can override DoModal( ), Is it a good idea to do this?
Please suggest...
Thanks
Pradeep
|
|
|
|
|
What are the assertions and where?
I tested this and it works on a non-MFC resource-only DLL:
HMODULE hResourceModule = LoadLibrary(_T("LabDB_DBRes.dll"));
HRSRC hResource = FindResource(hResourceModule, MAKEINTRESOURCE(3101), RT_DIALOG);
HGLOBAL hTemplate = LoadResource(hResourceModule, hResource);
CDialog MyDialog;
MyDialog.InitModalIndirect(hTemplate, this);
MyDialog.DoModal();
You can override DoModal but why do you need to?
Mark
|
|
|
|
|
Also, you may be using the wrong CDialog constructor. You just need to use the empty constructor
for indirectly-created dialogs
|
|
|
|
|
In constructor I have some initialization to NULL, Other than that nothing is there.
While debugging I found that in one place(DoModal Code) passing some wrong hInstance value. So I tried to override same in my code and passed hInstance = NULL. Then its worked for me, but still its strange thing why default code is not working (Not so clear).
|
|
|
|
|
You're not still using AfxSetResourceHandle are you?
You don't want to do that with the code I posted
|
|
|
|
|
Can you show the code for your dialog class constructor? You'll want to call CDialog's empty
constructor:
CMyDialog(...) : CDialog()
{
}
|
|
|
|
|
Hello all ,
I am just new to programming! I want to store the total number(deck[i].value) of several players evth having loop(players depend on user how many want).I tried many ways for that like vector and array.I dont know why I couldnt!Another thing,if user wants more cards,I want to give cards from old deck coz i dont want duplicates. anybody help me to solve out!
cout<<"how many player u want"<<endl;
cin>>n;
for ( i = 0; i < 3*n; ) {
int urtotal=0;
cout << " player" << n<< '\n';
for ( int j = 0; i < 56 && j < 3; i++, j++ ){
cout << deck[i].suit << deck[i].face <<" ";
urtotal+=deck[i].value;
}
cout<<urtotal;
}
|
|
|
|
|
davvid wrote: /*cout<<"want more"<<endl;
cin="">>cond;
while(cond=='y'){
urtotal =urtotal+rand()%1;
}
if(urtotal>42)
urtotal=urtotal-30;
else if(urtotal>31&&urtotal<42)
urtotal=urtotal-20;
else if(urtotal>21&&urtotal<32)
urtotal=urtotal-10;
cout<<urtotal;* <="" blockquote="">
Since this code is commented out, why include it in your post? It just adds to the confusion. Now if it actually has something to do with the problem, that's different. Also, don't forget to use <pre> tags.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Can you please illustrate more clearly what do you intend to do?
I understand you wnat to have a variable number of players and that you want to give to each player some cards (without having duplicates), no more...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Thank for ur help! I ld to variable from urtotal...but deck[i].value is concerned with struct function. and I dont know the size of variable. If player want 3 players , 3 variables wll store in oneplace. Because I want to compare all of them ..such wh is biggest and smallest. And the reason why I put (cond) statement at my post is I ll give 3 cards first for each player.if they want more cards ll be out from old deck that already used.But I dont know how to go back to there .And my (cond) statement is endless loop now. how do i stop it? After user get one more card ,I ld to plug in with old one ..suit and face... and out the total again.
sorry for my stupid Q...
|
|
|
|
|
Hello all,
I am making one win32 application in VC++.NET. I am using tree view in my application. Now I want to get handle of item from tree view using its text. Can I know how can I get it using text of tree node?
Thanks in advance.
|
|
|
|
|
std::map<std::string, HTREEITEM> treeItemIndex;
led mike
|
|
|
|
|
I don't like this approach because you end up storing the same data twice, and there is the risk the two structures go out of sync ... BTW congrats on the MVP status.
|
|
|
|
|
Ray Kinsella wrote: BTW congrats on the MVP status.
Thanks... it was completely unexpected. I didn't even know it existed until is saw the thread in the lounge. I only looked at the list to see who was on it, certainly did not expect to see my name in the list.
led mike
|
|
|
|
|
You can write a function to recursively iterate through the treeview nodes looking for the Text. So it would look something like this, bear in mind this is peusdocode, you also consider what happens when there are duplicates.
HTREEITEM hr = FindNode(NodeText, RootNode);
HTREEITEM FindNode(std::String NodeText, HTREEITEM myNode)
{
HTREEITEM hr = INVALID_HANDLE;
std::string s = treeview->getItemText(myNode);
if(s.compare(NodeText) == 0) return myNode;
if(treeview->hasChildren(myNode))
{
hr = FindNode(threeview->getFirstChild(myNode));
if(hr != INVALID_HANDLE) return hr;
}
if(treeview->hasSiblings(myNode))
{
hr = FindNode(threeview->getNextSibling(myNode));
if(hr != INVALID_HANDLE) return hr;
}
return INVALID_HANDLE;
}
|
|
|
|
|
Ray Kinsella wrote: You can write a function to recursively iterate through the treeview nodes looking for the Text
Have you checked the perfomance on a large tree? I tried it years ago and it crawled. I used the indexing solution to solve the performance issue.
led mike
|
|
|
|