Timers and Animation

theForger's Win32 API�̵̳ڶ���(��������)

��ҳ

����
  1. ��ʼѧϰ
  2. һ���򵥵Ĵ���
  3. ������Ϣ
  4. ������Ϣѭ��
  5. ʹ����Դ
  6. �˵���ͼ��
  7. �Ի���
  8. ��ģ̬�Ի���
  9. ��׼�ؼ�
  10. �Ի��򳣼�����
����һ����Ӧ��
  1. ������ʱ�����ؼ�
  2. �ļ��볣�öԻ���
  3. ��������״̬��
  4. ���ĵ�����
ͼ���豸�ӿ�
  1. λͼ���豸������
  2. ͸��λͼ
  3. ��ʱ���붯��
  4. �ı����������ɫ
�������ĵ�
  1. �ο�
  2. ��ѵ�Visual C++�����¸��£�
����
  1. ��������Ľ�Q����
  2. API vs. MFC
  3. ������Դ�ļ���˵��

��׼�ؼ�����ť���༭���б���

[images/ctl_one.gif]

��������ctl_one

������ע�⵽���Ѿ���ǰ����������ù���ť�ˣ��������Ƕ�������ٵ�Ӧ����Щ�˽��ˣ��������뵽��Ҫ�ڴ�������ʹ�����ǣ��һ����ڱ�����д����������������

�ؼ�

���ڿؼ�Ҫ��ס��һ���¾������Ǿ��Ǵ���.��ͬ�κ������Ĵ��ڣ������д��ڹ��̣������࣬�ȵȣ�������ϵͳע�ԣ��κ�����Զ�һ���������������㶼���Զ�һ���ؼ�����

��Ϣ

��������һ��������ǰ������Ϣѭ������������Ϣͨ�ţ��㷢����������һ���ؼ�����ʲô�����ؼ�����һ���¼���ʱ����Ҳ���㷢��һ��֪ͨ��Ϣ������ ��׼�ؼ����֪ͨ��һ��WM_COMMAND��Ϣ�����������ڰ�ť�Ͳ˵����Ѿ���������һ��.�����ں���Ҫ���ij����ؼ�����������WM_NOTIFY��

�������ڲ�ͬ�Ŀؼ��㷢���൱��ͬ����Ϣ��ÿ���ؼ������Լ�����Ϣ���ϣ���ʱһ����Ϣ�����ڶ���ؼ�����һ������ֻ����һ������ר������Ŀؼ��Ϲ����������б���(listbox) ����Ͽ�(combobox)����Ϣ(LB_*��CB_*)��һ�������������Խ���Ǽ��������ͬ�Ĺ��ܣ����Džs���ܻ��Q�����Լ�Ҳ��������죬��������Ҳ�����˼�����ˣ�)

��������һ���棬��WM_SETTEXT��ͨ����Ϣ��Ϊ������ؼ���֧�֣��Ͼ�һ���ؼ�����һ�����ڶ��ѣ�

�����������SendMessage()���API��������Ϣ����getDlgItem()����ȡ�ؼ��ľ���������������SendDlgItemMessage()��һ�����������������������ַ�ʽ�Ľ���ǵ�Ч�ģ�

�༭��

�����༭����Windowsϵͳ����õ�һ���ؼ����������Ñ������ı��������룬�޸ģ����ƣ��ȵȲ���. Windows�еļ��±��Ͳ����һ��ƽ���Ĵ�����������Ƕ��һ�����ı༭��

��������Ǵ����������ͱ༭��ӿڵĴ��룺

    SetDlgItemText(hwnd, IDC_TEXT, "This is a string");

�����������������ؼ��е����������ȫ�����루�����ڼ�����������ص��ı�ֵ�Ŀؼ����o̬�ؼ�����ť�ȵȣ���

�����ӿؼ���ȡ�ı�Ҳ��һ���ļ򵥣���Ȼ����һ��������Ҫ��...

    int len = GetWindowTextLength(GetDlgItem(hwnd, IDC_TEXT));
    if(len > 0)
    {
        int i;
        char* buf;

        buf = (char*)GlobalAlloc(GPTR, len + 1);
        GetDlgItemText(hwnd, IDC_TEXT, buf, len + 1);

        //... do stuff with text ...

        GlobalFree((HANDLE)buf);
    }

������������ҪΪҪ��������ַ�������һ��ȴ棬������ͷ���һ��ָ��ȴ������е��ַ�����ָ�룮Ϊ������һ�㣬��������ҪŪ���ΪҪ���ö��كȴ森�]��GetDlgItemTextLength()���API��������һ��GetWindowTextLength()����������Ҫ�Լ�ʹ��GetDlgItem()��ȡ�ؼ��ľ����

�����������ǻ�ȡ�˳��ȣ��Ϳ������Ãȴ���. ������������һ��СС�ļ�������Ƿ����ı�Ҫ��������Ϊ��ܿ��ܲ����봦��һ���յ��ַ�����������ʱ����Ҫ����������Ҳ�����Լ�����.��������Щ����Ҫ���������ǵ���GlobalAlloc()������һЩ�ȴ�. ���������õ�GlobalAlloc()�ȼ���calloc()��������DOS/UNIX�µı�̵Ļ�����Ϥ�Ļ���������һ��ȴ棬�����ʼ��Ϊ����������΃ȴ��ָ�룮���ڵ�һ������������Դ���ͬ��ֵ����Ϊ��ͬ��Ŀ��������ͬ�IJ��������ڴ˽̳�����ֻ������һ�ַ�ʽ��

������ע����������λ�öԳ��ȼ��ˣ������Ǹ�ʲô����ΪGetWindowTextLength()���ؿؼ����ַ������в�����ĩβ�Ǹ���ֹ���������ζ��������Dz��ӣ������Ãȴ����洢����ַ����Ļ����ַ������Է��£�������ֹ���ͻ�����ȴ�飬���ܻ��ƻ��e�����ݣ����·��ʳ�ͻ�����DŽe��ʲô���Ľ�����ڴ���windowsϵͳ�е��ַ�������ʱ����Ҫ����С�ģ�һЩAPI�ͺ���Ҫ���ַ������Ȱ�����ֹ��������һЩҪ��Ҫ����ʱ�ʱ����ĵ���

���������������]�н�����ֹ���Ļ�����ο�һ��C���ԵĿα����ǻ����̲ģ����ǻὲ�����

�������������GetDlgItemText()�����ؼ��ă��ݻ�ȡ�����Ǹո����úõĻ����������������Ҫ�󻺳����ij��Ȱ�����ֹ�������ķ���ֵ�Ǹ��Ƶ��ַ��������������ォ������ˣ�����������ֲ�������ֹ����������Ц�ɣ�����

��������ȫ�����������ı������Ͼ�Ҫ���ˣ�������Ҫ���Ǹո����õăȴ��ͷŵ���������й©�ˣ����䵽CPU�Ͼͻ�Ѽ�������·�����ǵ���GlobalFree()���������ǵ�ָ��Ϳ��������������ˣ�

��������ܻ������������������һ��API������LocalAlloc()��LocalFree()���ȵȣ����������ǣ���λwindowsϵͳ����ʷAPI.��Win32ƽ̨�У�Local*��Global*���փȴ���غ�����ȫ��һ���ģ�

�༭��������

�������������ı��ˣ�����������Ñ����������֣�����һ���ܳ����������Һ���һ��API�������������Ϊ�������еăȴ����ã������ַ���תΪ��������

    BOOL bSuccess;
    int nTimes = GetDlgItemInt(hwnd, IDC_NUMBER, &bSuccess, FALSE);

����GetDlgItemInt()��GetDlgItemText()�����ƣ����˺����ǰ�һ���ַ���������һ����������ȥ����ǰ���ǰ�һ���ַ����ڃȲ�תΪ����������ֵ���ظ��㣮�����������ǿ�ѡ�ģ���һ��ָ��£ϣϣ��͵�ָ�룮��Ϊ���������ʧ�ܵ�ʱ�򷵻أ������ԛ]�а취�����־����ǵ���ʧ���˻����Ñ�������һ����������㲻�����ã���ʾһ������ʧ�ܣ��Ǿ��ܺ�����������ɣ�

��������һ�����õIJ����DZ༭��ؼ���ES_NUMBER����������������ֻ�����Ñ����룰���������֣�����ֻ��Ҫ���������ʱ������������䷽�㣬��������r�²���ô������Ϊ�������������κ��������ַ��������������ţ�����С���㣩�����ָ�������

���

��������һ�������õĿؼ����б���������������ʱ��������һ����׼�ؼ�����Ϊʵ��˵�����Dz����Ǻ���Ȥ������㻹�]�ие�����Ļ������Ѿ��е��ˣ���

��һ���б���

���������һ���б������ĵ�һ���¾��Ǹ�����һ���

    int index = SendDlgItemMessage(hwnd, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)"Hi there!");

��������Կ���������һ���ܼ򵥵���������б���ָ����LBS_SORT����������ĸ˳��ӽ�ȥ�������������ӵ��б���β����

����������Ϣ���Ƿ��������ӵ��б������ţ����ǿ����������������б�����Єe��һЩ���������������һЩ���ݣ�һ�����һ��ָ��һ���京������Ϣ�Ľṹ���ָ�룬��һ����������ʶ����б���ı�ʶ�����㶨�ˣ�

    SendDlgItemMessage(hwnd, IDC_LIST, LB_SETITEMDATA, (WPARAM)index, (LPARAM)nTimes);

֪ͨ

�����б�������������������Ñ���һ���б�ѡ�������������Dz��Ǻܹ������Ǿ���ʲôʱ������ѡ�񣬱���������ǵ�ɾ����ť�����Dz���Ҫ֪��ʲôʱ��ѡ�񔏱��ˣ�����ֻ��Ҫ���Ñ����������ť��ʱ��������ˣ�

����Ȼ������Щʱ������������Ӧ�����������ѡ��ͬ���б���������ͬ����ʾ�����ijЩ��Ϣ. Ϊ������Ҫ��Ӧ�б�������Ƿ���֪ͨ��Ϣ. ����������Ҫע��LBN_SELCHANGE�����֪ͨ��Ϣ���������Ñ���������ѡ���б���Ŀ.LBN_SELCHANGE��WM_COMMAND������������ť��˵���WM_COMMAND��Ϣ����(һ�������Ӧ���)����ͬ���ǣ��б��򷢳�WM_COMMAND��Ϣ��ԭ��ܶ࣬��������Ҫ����һ���ļ���ҳ��������Ϣ. ֪ͨ������wParam�� HIWORD���ִ��ݣ�wParam������һ����������ǿؼ���ID��

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
            case IDC_LIST:
                // It's our listbox, check the notification code
                switch(HIWORD(wParam))
                {
                    case LBN_SELCHANGE:
                        // Selection changed, do stuff here.
                    break;
                }
            break;
            // ... other controls
        }
    break;

���б����л�ȡ����

����һ������֪��ѡ�񼺱������ˣ�����Ӧ�Ñ�Ҫ�����Ǿ���Ҫ���б����л�ȡѡ��Ľ�����������õĴ�����

��������������ʹ����һ����ѡ���б������Ի�ȡ��ѡ������嵥��Ҫ��С���ɣ������һ����ѡ������ͼ򵥵ط���һ��LB_GETCURSE��Ϣ�Ϳ��Ի����ѡ�����ţ�

������������Ҫ�����ѡ�����Ŀ���ݴ����Dz���Ϊ����Ҫ�������������Ãȴ森

    HWND hList = GetDlgItem(hwnd, IDC_LIST);
    int count = SendMessage(hList, LB_GETSELCOUNT, 0, 0);

Ȼ�������ѡ���б�����Ŀ�����Ãȴ棬������LB_GETSELITEMSȥ������飮

    int *buf = GlobalAlloc(GPTR, sizeof(int) * count);
    SendMessage(hList, LB_GETSELITEMS, (WPARAM)count, (LPARAM)buf);

    // ... Do stuff with indexes

    GlobalFree(buf);

���������У�buf[0]�ǵ�һ����ţ�һֱ��buf[count-1]��ź���ģ�

��������ܻ������Щ��ѡ�е��б����У���ȡ��������󶨵����ݣ�����һЩ����.���������������һ���򵥣���������һ����Ϣ�����ˣ�

    int data = SendMessage(hList, LB_GETITEMDATA, (WPARAM)index, 0);

�����������Ϊij�����͵���ֵ(�κ�32λ��)��Ϳ��Լ򵥵؏��ƽ���תΪ��Ӧ�����ͣ������������HBITMAP������int��ŷ���ֵ������

    HBITMAP hData = (HBITMAP)SendMessage(hList, LB_GETITEMDATA, (WPARAM)index, 0);

�o̬�ؼ�

��������ťһ�����o̬�ؼ�Ҳ�ܼ򵥣���Ϊ������������һ��ǰ�����д��������o̬�ؼ�һ����Ǻܰ��o����˼������һ�㲻�������ʲô�؄e���£���Ҫ�����������Ñ���ʾ�ı����������������ָ��һ�����صı�ʶʹ����΢����Щ��VC++������ָ��Ĭ�ϵı�ʶIDC_STATIC����ʵ����-1����ʾ���]�б�ʶ�����������Ϳ��������е�ʱ���������������Ñ���̬����ʾ���ݣ�

�����ڷ��������У�����һ���o̬�ؼ�����ʾѡ����б�������ݣ��ٶ���һ��ֻѡһ���б��

    SetDlgItemInt(hwnd, IDC_SHOWCOUNT, data, FALSE);

Copyright © 1998-2008, Brook Miles (forgey). All rights reserved.