yipwing 发表于 2011-10-8 01:30:18

VS2010自己DIY的Dialog程序创建流程(非MFC)

本帖最后由 yipwing 于 2011-10-8 01:30 编辑

首先说说,偶第一次发这种帖子,以前都是个潜水族,这个是我自己DIY的。。如果鱼油们喜欢DIY就拿去自己DIY。。如有错漏还请鱼油们指点指点。。
顺带一提,本文写给第一次接触Windows 编程(c/c++)的鱼油们。。SDK写CreateWindow各种不方便有木有?
这里抱歉了,没有图片。。。{:5_96:}
打开VS2010
1.新建一个项目并选择Win32选项
2.点击下一步,勾选选择空项目并点击完成
3.打开解决方案管理器 右键-->添加-->新建项-->选择头文件,并为文件取个你喜欢的名字
4.再次新建一个头文件(用作预编译),命名为stdafx.h(MFC生成的也有这个,你也可以复制一个MFC创建Dialog的stdafx.h,然后自己DIY); 关于预编译这里就不说了,自行google..
5.添加targetver.h
6.接下来就是.cpp文件,cpp也可以写C代码的; 命名也是随便取。然后是添加stdafx.cpp
7.最后,添加一个资源。 在资源文件那里右键-->添加-->资源,编译器会自动生成一个resource.h(这里会弹出一个添加资源的小窗口,点击Dialog,然后点击新建按钮);

好了,接下来是写代码了。。

为了方便我把我自己DIY的代码放上来。。附件在最后..

.h(不是预编译头文件)文件里添加几个函数定义和全局变量


#pragma once

#include "resource.h"


bool InitInstances(HINSTANCE hInstance, int nShowCmd); //初始化实例

bool InitDialogs(HWND hwnd);//初始化Dialog窗口

LRESULT CALLBACK Evol(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam); //主窗口回调

// 全局变量:
HINSTANCE g_hInst;                                                                // 当前实例
HWND g_hMainDlg;                                                                        // 主窗口句柄
HANDLE g_hFile;                                                                              // 主要修改文件


stdafx.h部分

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             //从 Windows 头文件中排除极少使用的信息
// Windows 头文件:
#include <windows.h>
#include <WindowsX.h>
#include <Commctrl.h>                        // Windows component
#include <Shellapi.h>                        // Windows Shell API
#include <Tlhelp32.h>                        // Windows Process API
#include <shobjidl.h>                        
#include <shlobj.h>
#include <Shlwapi.h>

// C 运行时头文件
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
// C++ 运行时文件
#include <assert.h>
// VC++ Header Files:
#include <uxtheme.h>
//Kernel Function..
#include <Winternl.h>

// TODO: 在此处引用程序需要的其他头文件

stdafx.cpp部分


#include "stdafx.h"

targetver.h部分

#pragma once

// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。

// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。

#include <SDKDDKVer.h>



.cpp代码部分

// Test.cpp : 定义应用程序的入口点。

#include "stdafx.h"
#include "Evol.h"
#pragma comment(lib,"Comctl32.lib")



int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
      MSG msg;
      HACCEL hAccelTable;

      if (!InitInstances(hInstance,nCmdShow)) //初始化实例
      {
                return false;
      }
      hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACC)); //载入加速键表
      while (GetMessage(&msg, NULL, 0, 0))                //消息循环
      {
                if (TranslateAccelerator(g_hMainDlg, hAccelTable, &msg)||!IsDialogMessage(g_hMainDlg,&msg)) //消息处理
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
      }
      return (int)msg.wParam;

}

bool InitInstances(HINSTANCE hInstance, int nShowCmd)
{
         INITCOMMONCONTROLSEX icex;                //某些控件需要,这是一个结构体                                                 │
         icex.dwSize=sizeof(icex);                //设置此结构体的大小                                                               │
         icex.dwICC=ICC_INTERNET_CLASSES + ICC_WIN95_CLASSES;      //控件使用的样式                         │
         InitCommonControlsEx(&icex);      //初始化控件类

      g_hInst = hInstance;                        //传递给全局变量
      g_hMainDlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,(DLGPROC)Evol);//创建Dialog窗口,并把句柄传递给全局变量

      if (g_hMainDlg==NULL)
      {
                return false;
      }
////////////////////////////////////////////
//这里是只让程序运行一个,方法有好几个,这里用我认为最简单的。
//
      if (!CreateMutex(NULL,TRUE,L"one")) //创建一个互斥对象
      {
                return false;                              
      }
      if (GetLastError()==ERROR_ALREADY_EXISTS) //如果已经有一个存在
      {
                ShowWindow(g_hMainDlg,SW_RESTORE);               
                SetForegroundWindow(g_hMainDlg);
                return false;
      }
////////////////////////////////////////////
      ShowWindow(g_hMainDlg,SW_SHOWNORMAL);
      UpdateWindow(g_hMainDlg);
      return true;
}
////////////////////////////////////////////
//主窗口回调
//
LRESULT CALLBACK Evol(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
      int wmId,wmEvent;
      wmId    = LOWORD(wParam);
      wmEvent = HIWORD(wParam);
      switch(uMsg)
      {
      case WM_SYSCOMMAND:
                break;
      case WM_COMMAND:
                break;
      case WM_CLOSE:
                DestroyWindow(hwnd);
                break;
      case WM_DESTROY:
                PostQuitMessage(0);
                break;
      case WM_INITDIALOG:
                return InitDialogs(hwnd);
      }

      return 0;
}

///////////////////////////////////////////
//初始化Dialog窗口
//我这里处理的是窗口左上角的小图标
bool InitDialogs(HWND hwnd)
{
      HMENU hMenu = GetSystemMenu(hwnd,FALSE);      //获得窗口句柄,并赋给HMENU的变量
      if (!hMenu)
                return false;
      HICON hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_TEST), IMAGE_ICON, 0,0, LR_SHARED+LR_DEFAULTSIZE);//载入- -!!不知道怎么说,反正就是载入一个图像
      SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon);      //发送消息
      SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);      //同上

      return TRUE;
}
源码:**** Hidden Message *****
最后的最后 如有啥问题,请回帖告之。。谢谢各位鱼油。。。


ZPCG 发表于 2011-10-8 01:47:52

新词蛋生了:鱼油!

yipwing 发表于 2011-10-8 01:54:49

本帖最后由 yipwing 于 2011-10-8 02:08 编辑

ZPCG 发表于 2011-10-8 01:47 static/image/common/back.gif
新词蛋生了:鱼油!
这还真是我故意打的。。{:5_109:}

顺便问下,你的学习方向。。。

明天来看你的回答,睡觉去了。。

Y.H 发表于 2011-10-8 13:57:01

唉,不想打击的,,,,,,其实鱼油这个词在论坛里出来非常久了..............


不过这个还是很好的!

yipwing 发表于 2011-10-8 13:59:58

Y.H 发表于 2011-10-8 13:57 static/image/common/back.gif
唉,不想打击的,,,,,,其实鱼油这个词在论坛里出来非常久了..............




鱼油貌似是小甲鱼先说的。。{:5_109:}

xietao1233 发表于 2011-10-11 20:09:06

好贴,正好需要:lol

yangwenjia 发表于 2013-1-31 21:11:59

好贴,正好需要

qingcai8 发表于 2013-6-20 11:20:09

终于可以回复了急需代码啊

8可41 发表于 2013-7-3 09:43:55

学习了,感谢楼主

我挖 发表于 2013-7-3 17:30:21

看看,回帖支持下

coko 发表于 2013-7-3 21:58:30

看看支持下

小败的星辰花 发表于 2013-7-3 22:15:05

灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌

coko 发表于 2013-7-4 11:41:53

再看看,温故知新

Q唐 发表于 2014-11-4 19:59:35

代码代码:lol:

diehard 发表于 2014-11-30 19:49:16

谢谢楼主

历史的天空111 发表于 2015-8-10 14:21:45

谢谢楼主

奮闘 发表于 2015-8-20 22:19:28

看一下隐藏的,学习了~

红茶 发表于 2015-8-21 01:03:30

对楼猪只能说,你太伟大了!!

wamn8023 发表于 2015-8-21 09:35:27

看看

15897752 发表于 2015-12-24 22:20:43

学习学习
页: [1] 2
查看完整版本: VS2010自己DIY的Dialog程序创建流程(非MFC)