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

shn5217758521 2010-08-12 10:39:46
#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:指向对话框过程的指针”
请教,这个怎么处理啊
...全文
156 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyf092220 2011-05-20
  • 打赏
  • 举报
回复
回调函数的声明应该是这样的
INT CALLBACK DlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
并且在实现部分也应该这样。也就是说将"INT_PTR"该为"INT"就可以通过编译了,我也遇到了
和楼主相同的问题,虽然这个帖子已经过了很久了,但是知识是不会过时的。
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 visualeleven 的回复:]
引用 12 楼 shn5217758521 的回复:
引用 6 楼 fangongdalu7148 的回复:
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

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

刷新部分没有处理好???……
[/Quote]
可能是吧,我自己弄弄这里,感谢
Eleven 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 shn5217758521 的回复:]
引用 6 楼 fangongdalu7148 的回复:
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

编译通过也实现了,但当我改变对话框的尺寸的时候,上面的按钮和文字就会留下拖动的痕迹,还是不理想
[/Quote]
刷新部分没有处理好???
schlafenhamster 2010-08-12
  • 打赏
  • 举报
回复
从错误提示: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 *)
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fangongdalu7148 的回复:]
在 WM_SIZE 消息中 更新窗口,Invivalid
[/Quote]
用这个函数了“InvivalidateRect”
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
感谢楼上各位,今天第一次发帖就有这么多人帮忙,很是感谢,我刚起步自学VC,以后有不懂的还得向你们多多请教:)
zgsdzhaolanxiang1 2010-08-12
  • 打赏
  • 举报
回复
在 WM_SIZE 消息中 更新窗口,Invivalid
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xuddk727 的回复:]
编译环境是什么?
[/Quote]
VC 哪版的不记得了
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangongdalu7148 的回复:]
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
[/Quote]
编译通过也实现了,但当我改变对话框的尺寸的时候,上面的按钮和文字就会留下拖动的痕迹,还是不理想
许文君 2010-08-12
  • 打赏
  • 举报
回复
编译环境是什么?
zgsdzhaolanxiang1 2010-08-12
  • 打赏
  • 举报
回复
在 VS2008 楼主的代码是没问题的,,
wltg2001 2010-08-12
  • 打赏
  • 举报
回复
我直接试了一下你的代码,编译链接都没有问题
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 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,……
[/Quote]
没关系,能帮忙我就很感谢了:)
wltg2001 2010-08-12
  • 打赏
  • 举报
回复
原型写成: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)”
zgsdzhaolanxiang1 2010-08-12
  • 打赏
  • 举报
回复
int CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
wltg2001 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 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)
将前面的声明部分改成……
[/Quote]
不好意思,看错了
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wltg2001 的回复:]
声明和实现不一致:
你声明是:DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
实现是:
INT_PTR CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
将前面的声明部分改成和实现一样就行了。
[/Quote]
是一样的啊
shn5217758521 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 schlafenhamster 的回复:]
BOOL CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
[/Quote]
还是不行啊
wltg2001 2010-08-12
  • 打赏
  • 举报
回复
声明和实现不一致:
你声明是:DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
实现是:
INT_PTR CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
将前面的声明部分改成和实现一样就行了。
schlafenhamster 2010-08-12
  • 打赏
  • 举报
回复
BOOL CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧