C语言 对话框与对话框之间的参数传递

1、两个对话框,主对话框在MainDlg.cpp中,还有一个在LoginDlg.cpp中。2、在MainDlg.cpp中,向LoginDlg.cpp传递一个指向函数的指针... 1、两个对话框,主对话框在MainDlg.cpp中,还有一个在LoginDlg.cpp中。
2、在MainDlg.cpp中,向LoginDlg.cpp传递一个指向函数的指针,DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,LoginDlg_Proc,(LPARAM)pHowLong); (LPARAM)pHowLong 是指向要传递函数的指针。在LoginDlg.cpp中,由
BOOL LoginDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)函数的
lParam参数接收。(a)如果我想在传递(LPARAM)pHowLong 这个指向函数的指针的同时,再传递一个变量,或结构体,应该怎么做。在LoginDlg.cpp中接收参数时,怎样接收(也就是 指向函数的指针传递给哪个参数,变量或结构体传递给哪个参数)。
(b)或者是我在MainDlg.cpp中只传递指向函数的指针(LPARAM)pHowLong ,然后设置一个全局变量(int COUNT),来记录我在LoginDlg.cpp需要的值,从而达到在MainDlg.cpp中通过设置的全局变量,也可以使用这个值的目的。问题是,如何设置这个全局变量,假设我把他设置在LoginDlg.h中,MainDlg.cpp和LoginDlg都把这个头文件include进来,就会报错,(大概意思是:int COUNT 已经定义过了),也就是在编译时,LoginDlg.h被include了两次,int COUNT也进行了两次,所以会报错。如何解决全局变量这个问题。 (请求:本人菜鸟,希望高手们能给出详细的解释,谢谢)
展开
 我来答
zxpointer
2012-04-15 · TA获得超过4100个赞
知道大有可为答主
回答量:1868
采纳率:33%
帮助的人:1205万
展开全部
我先说一下你的(b)吧, 首先在logindlg.h中定义全局变量int count; 并且在maindlg.cpp和logindlg.cpp都把它们#include进来的话,由于两个.cpp都有符号count,在它们分别编译成maindlg.o和logindlg.o后链接器连接会失败。因为在一个工程文件中有两个目标文件中存在相同符号且都为全局作用域的。
一个解决办法就是在logindlg.h中定义的int count前加上static关健字。这样由于全局变量前加上static属于限定该变量只能在本文件中使用。这时maindlg.cpp和logindlg.cpp中都有各自独立的count。所以不会出现连接错误,可是这存在一个不合理就是它们是各自的变量,属于本文件内使用,互不影响 ,这样假如你想在两个文件中都对count变量进行修改,并且也想让它在另一个文件中使用修改后的值就不行了。因为是maindlg.cpp中有一个count 而logindlg.cpp中也有一个count两个是独立的。不影响 。
那么如何办到呢。可以使用extern关键字,首衔在maindlg.cpp中定义全局变量int count;
然后在logindlg.h中声明count,写法为 extern int count; 然后在logindlg.cpp中#include "logindlg.h" 即可。 定义在主文件中,然后在login文件中对它进行声明,这样就不会出错了
而且你在主对话框中对值的修改也可以传递到login文件中。

(a)的话,我看了一下msdn其中lparam只是一个dword类型的参数。如果想传个指针过去未必可行,我到是没有试过。正常的方式, 就是说 如果它可以传一个void*类型的数据的话,
那么当你需要传递多个参数时可以通过将这些参数 放在一个结构体中, 然后把这个结构体的指针传递过去了 就可以了

大概就说这些, 有什么不懂的 可以 继续问
追问
呵呵,非常感谢,全局变量的问题解决了。
对于(a)的话,DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,LoginDlg_Proc,(LPARAM)pHowLong); 这个函数是可以传指针的,我定义一个指针指向要调用的函数,然后在LoginDlg.cpp中就可以用这个函数。假定我必须用DialogBoxParam这个函数传递指向函数的指针,那么在LoginDlg.cpp中产生的某个值,我需要在MainDlg.cpp用到,我怎样把这个值传递回MainDlg.cpp中。
追答
一种简单的办法就是使用全局变量, 让多个cpp文件中都可以使用到这个变量, 方法就是我上边说明的了。 另一种办法就是在Login这个对话框结束时通过返回值传递回主对话框, 结束时要调用EndDialog 有一个参数就可以传值给主调部分, 这样dialogboxparam这个函数的返回值就是你要传回来的东西。  可以通过这个办法来实现。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式