标题:调用api函数做了一个图形界面,可是打开exe文件后没有反应啊,但进程中的确 ...
只看楼主
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
结帖率:95.65%
 问题点数:0 回复次数:3 
调用api函数做了一个图形界面,可是打开exe文件后没有反应啊,但进程中的确打开了
#include<windows.h>
#include<stdio.h>

LRESULT CALLBACK WinXrProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow   )           // show state)
{
 WNDCLASS wnd;
 wnd.cbClsExtra=0;
 wnd.cbWndExtra=0;
 wnd.hbrBackground=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
 wnd.hCursor=LoadCursor(NULL,IDC_CROSS);
 wnd.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 wnd.hInstance=hInstance;
 wnd.lpfnWndProc=WinXrProc;
 wnd.lpszClassName="XiangRong";
 wnd.lpszMenuName=NULL;
 wnd.style=CS_HREDRAW|CS_VREDRAW;
 
 RegisterClass(&wnd);
 HWND hwnd;
 hwnd=CreateWindow("XiangRong","第一个程序",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);

 ShowWindow(hwnd,SW_SHOWNORMAL);
 UpdateWindow(hwnd);
 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return 0;
}

LRESULT CALLBACK WinXrProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam)   // second message parameter


{

 HDC Hdc;
 PAINTSTRUCT ps;
 switch(uMsg)
 {
   case WM_CHAR:
     char sz[20];
     sprintf(sz,"char is %d",wParam);
     MessageBox(hwnd,sz,"提示",MB_OK);
     break;
   case WM_LBUTTONDOWN:
     MessageBox(hwnd,"mouse is clicked","提示",0);
     HDC HDc;
     HDc=GetDC(hwnd);
     TextOut(HDc,0,50,"简单的窗口建立",strlen("简单的窗口建立"));
     ReleaseDC(hwnd,HDc);
     break;
   case WM_PAINT:
   
     Hdc=BeginPaint(hwnd,&ps);
     TextOut(Hdc,0,100,"真他妈的难",strlen("真他妈的难"));
     EndPaint(hwnd,&ps);
     break;
   case WM_CLOSE:
     if(IDYES==MessageBox(hwnd,"是否真的要退出","提示",MB_YESNO))
     {
      DestroyWindow(hwnd);
     }
     break;
   case WM_DESTROY:
     PostQuitMessage(0);
     break;
   default:DefWindowProc(hwnd,uMsg,wParam,lParam);
 
 }
 return 0;
}
搜索更多相关主题的帖子: 图形 api previous message command 
2012-05-20 22:47
qq492927689
Rank: 1
等 级:新手上路
帖 子:28
专家分:5
注 册:2011-4-27
得分:0 
你在CreateWindow后面加一句
2012-07-24 08:54
qq492927689
Rank: 1
等 级:新手上路
帖 子:28
专家分:5
注 册:2011-4-27
得分:0 
发错了,你在CreateWindow加一句
if(!hwnd)
{
    MessageBox(NULL,TEXT("窗口创建失败了"),TEXT("提示:"),MB_OK);
}

再运行一下就知道了,但是……

你丫的,你怎么搞出这么一个程序的,哥找了半天也找不到创建失败的原因!!!


2012-07-24 08:55
qq492927689
Rank: 1
等 级:新手上路
帖 子:28
专家分:5
注 册:2011-4-27
得分:0 
找到了,问题出在这一句  【default:DefWindowProc(hwnd,uMsg,wParam,lParam);】
不可以这样写的,因为DefWindowProc是需要作一次返回,告诉系统该程序发生了什么事,系统根据它的返回值判断是否成功才执行下一步的响应。
所以DefWindowsProc必须作一个返回,改成【default:  return DefWindowProc(hwnd,uMsg,wParam,lParam);】

2012-07-24 09:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-367795-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015600 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved