| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2897 人关注过本帖
标题:写了个win32基础的窗口 有些问题请教大牛们
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 14楼 hellovfp
我现在能够加载窗口背景了 你提示下如果我不用CreateThread()能不能消除闪烁

梅尚程荀
马谭杨奚







                                                       
2012-05-04 13:09
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
……去看看

梅尚程荀
马谭杨奚







                                                       
2012-05-04 14:30
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 25楼 hellovfp
是不是和做个向导差不多?

梅尚程荀
马谭杨奚







                                                       
2012-05-04 15:11
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
……谁? 有丁俊晖吗?

梅尚程荀
马谭杨奚







                                                       
2012-05-04 15:26
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 30楼 hellovfp
呵呵 偶尔看看斯诺克 还真带劲 喜欢丁俊晖

刚才去看了下WIN32汇编 哈哈 在原来的程序做了个小小的改动就OK 了 不过有点取巧。
把重绘区域锁定在一个范围后 就不干扰其他的图形了 这样的
程序代码:
void yrjd_OnTimer(HWND hWnd, UINT nIDEvent)
{
    RECT rect = {510, 200, 810, 400};
    choice = (choice + 1) % 6;
    InvalidateRect(hWnd, &rect, TRUE);  
}

....__
程序代码:
void yrjd_OnTimer(HWND hWnd, UINT nIDEvent)
{
    srand(time(NULL));
    RECT rect = {510, 200, 810, 400};
    choice = rand() % 6;
    InvalidateRect(hWnd, &rect, TRUE);  
}
发现在.cpp文件头加很多头文件不太好看 我为了随机显示又添加了两个头文件

[ 本帖最后由 有容就大 于 2012-5-4 16:31 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-04 15:50
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
去做了个模版文件 你看下怎么样:
Stdafx.h
程序代码:
///////////////////////////////////////
// Program Name: Stdafx.h
// Programmer: yrjd
// Description: Set head files together
//////////////////////////////////////////

#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <Windows.h>
#include <Windowsx.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

#pragma warning(disable: 4068)
#pragma warning (disable:4100) // Please think about these two sentences
#pragma hdrstop

Template.cpp
程序代码:
///////////////////////////////////////
// Program Name: Template.cpp
// Programmer: yrjd
// Description: *****Add code here*****
//////////////////////////////////////////

#include "Stdafx.h"
#include "Template.h"

// Global variables
static char szAppName[] = "An Template";
static HINSTANCE hInstance;
static HWND  hWnd;
static int cxClient, cyClient;

//*********************
// Initialization
//*********************

//---------------------------
// WinMain is the entry point
//---------------------------

#pragma argsused
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,
                   LPSTR lpszCmdParam, int nCmdShow    )
{
    MSG msg;

    if (!hPrevInstance)  // In fact this sentence may be omitted
        if (! Register(hInst))  // Registered Window Class
        {
            return FALSE;
        }
  
    if (!Create(hInst, nCmdShow))   // Create a window instance
    {
        return FALSE;
    }

    while (GetMessage(&msg, NULL, 0, 0)) // Message circulation
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

////////////////////////////////////
// Register the window
////////////////////////////////////

#pragma argsused
BOOL Register(HINSTANCE hInst)
{
    WNDCLASS wndclass;

    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.hInstance = hInst;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;  // Notice this 'szAppName'

    return (RegisterClass(&wndclass));   // The function here is very important
}

////////////////////////////////////
// Create the Window and show it.
////////////////////////////////////

#pragma argsused
BOOL Create(HINSTANCE hInst, int nCmdShow)
{
    hInstance = hInst;   // Connect with the global instance

    HWND hWnd = CreateWindowEx(0, szAppName, szAppName,
                        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0,
                        CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);
    if (hWnd == NULL)
    {
        return FALSE;
    }

    ShowWindow(hWnd, nCmdShow);   //...
    UpdateWindow(hWnd);           //...

    return TRUE;
}

//*********************
// Implementation
//*********************

//--------------------------------
// The Window proc help control
// the program when it is running
//--------------------------------

LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
                         WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
      HANDLE_MSG(hWnd, WM_CREATE, yrjd_OnCreate);
      HANDLE_MSG(hWnd, WM_SIZE, yrjd_OnSize);
      HANDLE_MSG(hWnd, WM_DESTROY, yrjd_OnDestroy);
      HANDLE_MSG(hWnd, WM_CLOSE, yrjd_OnClose);
      HANDLE_MSG(hWnd, WM_PAINT, yrjd_OnPaint);
      HANDLE_MSG(hWnd, WM_TIMER, yrjd_OnTimer);
  
      default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
}

// Create Window

#pragma argsused
BOOL yrjd_OnCreate(HWND hWnd, CREATESTRUCT FAR *lpCreateStruct)
{
    return TRUE;
}

// Specify the size
void yrjd_OnSize(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    cxClient = LOWORD(lParam);
    cyClient = HIWORD(lParam);
}

// Handle WM_DESTROY
void yrjd_OnDestroy(HWND hWnd)
{
    PostQuitMessage(0);
}

// Handle WM_CLOSE
void yrjd_OnClose(HWND hWnd)
{
    if (IDYES == MessageBox(hWnd, "Do you want to exit?", "choice", MB_YESNO))
    {
        DestroyWindow(hWnd);
    }
}

// Handle WM_PAINT
void yrjd_OnPaint(HWND hWnd)
{
    PAINTSTRUCT ps;
    HDC hdc;
    hdc = BeginPaint(hWnd, &ps);
    // To add code here.....
    EndPaint(hWnd, &ps);
}

// Handle WM_TIMER
void yrjd_OnTimer(HWND hWnd, UINT nIDEvent)
{
    ;
}
_____________
Template.h
程序代码:
////////////////////////////////////////////////
// Program Name: Template.h
// Programmer: yrjd
// Description: Head file for Template.cpp
////////////////////////////////////////////////

// Variables
// Add code here.....

// Some procs
BOOL Register(HINSTANCE hInst);
BOOL Create(HINSTANCE hInst, int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
                         WPARAM wParam, LPARAM lParam);

// The yrjd Class
BOOL yrjd_OnCreate(HWND hWnd, CREATESTRUCT FAR *lpCreateStruct);
void yrjd_OnSize(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
void yrjd_OnDestroy(HWND hWnd);
void yrjd_OnPaint(HWND hWnd);
void yrjd_OnTimer(HWND hWnd, UINT nIDEvent);
void yrjd_OnClose(HWND hWnd);

 

[ 本帖最后由 有容就大 于 2012-5-4 18:17 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-04 16:21
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 33楼 hellovfp
今天还有两场半决赛吧 看好谁?奥沙利文?

梅尚程荀
马谭杨奚







                                                       
2012-05-05 11:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
大哥 再问个问题
我去搞了下兼容DC 大致流程这样
程序代码:
    HWND hWnd;
    HDC hdcBuf;
    HBITMAP hbmpBuf;
    RECT rect = {0, 0, 200, 200}
  
    HDC hdcMain = GetDC(hWnd);
    hdcBuf = CreateCompatibleDC(hdcMain);
    hbmpBuf = CreateCompatibleBitmap(hdcMain, 200, 200);
    SelectObject(hdcBuf, hbmpBuf);
    FillRect(hdcBuf, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
    ReleaseDC(hWnd, hdcMain);
先创建一个窗口 hWnd 然后在这个窗口下衍生一个兼容设备hdcBuf 发现这时候如果想获取
hdcBuf的窗口句柄就无从下手,是不是内存DC不存在HWND呢?
有没有这种可能
先分别创建两个窗口hWnd1, hWnd2 他们对应的DC 分别是hdc1, hdc2
在通过一个什么法子让hdc2成为hdc1的兼容设备?这样我们就可以操控hdc2的窗口句柄hWnd2实现某些想
要的API功能。


[ 本帖最后由 有容就大 于 2012-5-5 12:16 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-05 12:14
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 35楼 hellovfp
程序代码:
  hTimer = SetTimer(0, 0, 55, ProcTimer);
   
   
    while( GetMessage(&msg , NULL, 0, 0) >0 )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
   
    KillTimer(0, hTimer);
这段很有意思 WM_TIMER是在消息队列之外吗?
为什么 用目的窗口覆盖源窗口 程序会自行拷贝出很多子窗口 而且还超不出第一个目的窗口的范围?

梅尚程荀
马谭杨奚







                                                       
2012-05-05 12:34
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
在去看看……

梅尚程荀
马谭杨奚







                                                       
2012-05-05 13:14
快速回复:写了个win32基础的窗口 有些问题请教大牛们
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017836 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved