hur.cn - 华软网

 热门搜索

一段代码中,关于DialogBox的函数

  作者:未知    来源:网络    更新时间:2010/8/12
#include <windows.h>
#include "resource.h"

//全局变量声明
//主对话框的窗口句柄
HWND g_hWnd = NULL;
//对话框改变之前的大小
SIZE g_siDlg = {0};

//函数声明
//对话框过程函数
INT_PTR CALLBACK 
DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
//对话框命令响应
void OnCommand(WPARAM wp, LPARAM lp);
//WM_SIZE消息响应
void OnSize(WPARAM wp, LPARAM lp);
//按照指定规则移动某个控件
void MoveCtrl(UINT nID, int x, int y, BOOL bLeft, BOOL bTop, BOOL bRight, BOOL bBottom);
//将屏幕坐标转换为窗体坐标
void ScreenToClientRect(LPRECT prc);

//应用程序的入口函数
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    //弹出一个模式对话框,并等待对话框结束
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL,DlgProc);
    return 0;
}
//对话框过程函数
INT_PTR CALLBACK 
DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg) 
    {
    case WM_INITDIALOG:        //对话框初始化
        {
            //保存窗口原始尺寸
。。。。。。。

编译时出现的问题“ cannot convert parameter 4 from 'long (struct HWND__ *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)”
第4个参数是要“IpDialogFunc:指向对话框过程的指针”
请教,这个怎么处理啊
       
---华软 网友回答---
BOOL CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

---华软网友回复---
声明和实现不一致:
你声明是:DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
实现是:
INT_PTR CALLBACK  DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
将前面的声明部分改成和实现一样就行了。

---华软网友回复---
引用 1 楼 schlafenhamster 的回复:
BOOL CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

还是不行啊
---华软网友回复---
引用 2 楼 wltg2001 的回复:
声明和实现不一致:
你声明是:DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
实现是:
INT_PTR CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
将前面的声明部分改成和实现一样就行了。

是一样的啊
---华软网友回复---
引用 4 楼 shn5217758521 的回复:
引用 2 楼 wltg2001 的回复:
声明和实现不一致:
你声明是:DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
实现是:
INT_PTR CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
将前面的声明部分改成……

不好意思,看错了
---华软网友回复---
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

---华软网友回复---
原型写成:INT_PTR CALLBACK  
DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
是对的,MSDN上给的原型就是这个,你上面的代码真看不出什么问题,错误提示给的是:
 cannot convert parameter 4 from 'long (struct HWND__ *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)”

---华软网友回复---
引用 5 楼 wltg2001 的回复:
引用 4 楼 shn5217758521 的回复:
引用 2 楼 wltg2001 的回复:
声明和实现不一致:
你声明是:DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
实现是:
INT_PTR CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,……

没关系,能帮忙我就很感谢了:)
---华软网友回复---
我直接试了一下你的代码,编译链接都没有问题
---华软网友回复---
在 VS2008 楼主的代码是没问题的,,
---华软网友回复---
编译环境是什么?
---华软网友回复---
引用 6 楼 fangongdalu7148 的回复:
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

编译通过也实现了,但当我改变对话框的尺寸的时候,上面的按钮和文字就会留下拖动的痕迹,还是不理想
---华软网友回复---
引用 11 楼 xuddk727 的回复:
编译环境是什么?

VC  哪版的不记得了
---华软网友回复---
在 WM_SIZE 消息中 更新窗口,Invivalid
---华软网友回复---
感谢楼上各位,今天第一次发帖就有这么多人帮忙,很是感谢,我刚起步自学VC,以后有不懂的还得向你们多多请教:)
---华软网友回复---
引用 14 楼 fangongdalu7148 的回复:
在 WM_SIZE 消息中 更新窗口,Invivalid

用这个函数了“InvivalidateRect”

---华软网友回复---
从错误提示:cannot convert parameter 4 from 'long (struct HWND__ *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)”
1,返回类型不对long int(即BOOL)
2,缺:(__stdcall *)
---华软网友回复---
引用 12 楼 shn5217758521 的回复:
引用 6 楼 fangongdalu7148 的回复:
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

编译通过也实现了,但当我改变对话框的尺寸的时候,上面的按钮和文字就会留下拖动的痕迹,还是不理想

刷新部分没有处理好???
---华软网友回复---
引用 18 楼 visualeleven 的回复:
引用 12 楼 shn5217758521 的回复:
引用 6 楼 fangongdalu7148 的回复:
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

编译通过也实现了,但当我改变对话框的尺寸的时候,上面的按钮和文字就会留下拖动的痕迹,还是不理想

刷新部分没有处理好???……

可能是吧,我自己弄弄这里,感谢
---华软网友回复---
回调函数的声明应该是这样的
INT CALLBACK DlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
并且在实现部分也应该这样。也就是说将"INT_PTR"该为"INT"就可以通过编译了,我也遇到了
和楼主相同的问题,虽然这个帖子已经过了很久了,但是知识是不会过时的。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。